2009-11-25 28 views
5

Tôi đang cố gắng để đánh giá chiến lược khác nhau đối với trường hợp không nhạy cảm UTF-8 chuỗi so sánh.Trường hợp gấp UTF-8 mà không biết ngôn ngữ

Tôi đã đọc một số tài liệu từ tổ hợp Unicode, thử nghiệm với ICU và cố gắng đưa ra các lựa chọn thay thế chất lượng khác nhau.

Trong nhiều trường hợp, tôi đã thấy các văn bản khác nhau giữa Bản đồ trường hợp đơn giản và Bản đồ trường hợp đầy đủ và tôi muốn đảm bảo rằng tôi hiểu sự khác biệt hoàn toàn.

Khi tôi đọc nó, ánh xạ trường hợp đơn giản là "không có ngữ cảnh", tức là không cần biết tải trọng của ngôn ngữ là gì. Điều này sẽ cho kết quả gần đúng, do sự thất bại "I/ı/İ/i" của Turkic.

Full Trường hợp bản đồ, mặt khác, cần phải biết ngôn ngữ của tải trọng để có thể thực hiện việc lập bản đồ. Với thông tin bổ sung đó, có thể thực hiện các biện pháp đặc biệt để bao gồm các trường hợp "Kim" như một chuỗi Turkic sẽ trở thành "KİM" trong chữ hoa, nhưng "Kim" là chuỗi tiếng Anh, sẽ trở thành "KIM" trong chữ hoa.

Có tôi mà phải không?

Có ví dụ khác về điểm mã "nhiều mặt" mà gấp khác nhau cho các ngôn ngữ khác nhau?

Cảm ơn!

UPDATE: Một trong những nguồn nhắc đến bản đồ trường hợp đơn giản như là ngôn ngữ độc lập là ICU's documentation. Tôi giải thích rằng đó là sự thật Unicode, nhưng có lẽ nó chỉ là một tuyên bố của việc thực hiện?

Trả lời

2

Không, một "đầy đủ bản đồ trường hợp" là một vỏ nơi một điểm mã cần phải được thay thế bằng nhiều hơn một codepoints mới. Một ánh xạ trường hợp đơn giản là một sự thay thế codepoint duy nhất.

Nếu bạn muốn tự mình triển khai thì tệp Unicode CaseFolding.txt là rất quan trọng để có được quyền này. Lưu ý mã trạng thái "T", cụ thể là để xử lý vấn đề tiếng Thổ Nhĩ Kỳ.

+0

Vì vậy, cả hai đều cần bối cảnh ngôn ngữ, phải không? Tôi sử dụng một thư viện bên thứ ba (PCRE) mà không sử dụng CaseFolding.txt, nhưng chỉ có thông tin trường hợp từ UnicodeData.txt, và không yêu cầu ngữ cảnh ngôn ngữ (không rõ ràng và ngầm, theo như tôi có thể nói). Tôi nghĩ có lẽ đó là một thỏa hiệp hợp lệ trong trường hợp đơn giản. –

+0

Tuyệt đối. Như đã lưu ý trong tệp, bạn sẽ cần phải biết khi nào bỏ qua các bản ghi với mã trạng thái "T". –

+0

Theo như tôi thấy, mã trạng thái T xuất hiện trong CaseFolding.txt và không phải UnicodeData.txt. Nhưng bạn có thực sự nói rằng _correct_ folding chỉ có thể được thực hiện với kiến ​​thức về ngữ cảnh ngôn ngữ? Tôi đang tìm kiếm một thỏa hiệp không đòi hỏi bối cảnh, và không hoàn hảo 100% ... Nhưng có lẽ đó là bước đầu tiên trên con đường đến sự ấm áp? –

2

Vâng ... Sự kết hợp phụ âm "SS" sẽ xuống chữ "ss" cho hầu hết các ngôn ngữ phương Tây, nhưng bằng tiếng Đức nó có thể trở thành chữ cái đặc biệt "ß". Đó chỉ là "có thể", có khá nhiều tham gia usage rules để xem xét.

Tôi nghĩ điều này không trực tiếp ảnh hưởng đến thứ tự đối chiếu (bất kỳ người Đức nào cũng được chào đón để sửa tôi), vì vậy có thể đó là điểm tranh luận.

+0

Cảm ơn! Tôi có hiểu sự khác biệt của bản đồ đơn giản so với bản đồ đầy đủ một cách chính xác không? –

+3

Mặc dù uppercasing "ß" sẽ cung cấp cho bạn "SS", tôi đã thấy không có khung làm oposite (chữ thường ("SS") để dẫn đến "ß"). Điều này là do đôi khi nên là "ss" và cách duy nhất để quyết định là có một từ điển đầy đủ của Đức. Và đôi khi thậm chí là không đủ (ví dụ như cả hai "weiss" và "weiß" là những từ chính xác). Trong thực tế, ngay cả một con người có thể viết thường "WEISS" không có ngữ cảnh (ý nghĩa của nó). –

+0

@Mihai - cảm ơn, điều đó có ý nghĩa. Tôi đã có cùng một suy nghĩ, rằng uppering sẽ dễ dàng hơn nhiều so với hạ thấp. –

Các vấn đề liên quan