Lớp chuỗi dựa trên đồ thị?


9

Tôi tự hỏi tại sao chúng ta không có một số lớp chuỗi đại diện cho một chuỗi các cụm đồ thị Unicode thay vì các điểm mã hoặc ký tự. Đối với tôi, dường như trong hầu hết các ứng dụng, các lập trình viên sẽ dễ dàng truy cập các thành phần của đồ thị hơn khi cần thiết hơn là phải tổ chức chúng từ các điểm mã, điều này có vẻ cần thiết ngay cả khi chỉ để tránh tình cờ phá vỡ một chuỗi trong "mid-grapheme" (ít nhất là trên lý thuyết). Trong nội bộ, một lớp chuỗi có thể sử dụng mã hóa độ dài thay đổi, chẳng hạn như UTF-8, UTF-16 hoặc trong bối cảnh này, ngay cả UTF-32 cũng có độ dài thay đổi; hoặc triển khai các lớp con cho tất cả chúng (và tùy chọn cấu hình lựa chọn trong thời gian chạy để các ngôn ngữ khác nhau có thể sử dụng mã hóa tối ưu của chúng). Nhưng nếu các lập trình viên có thể "nhìn thấy" các đơn vị grapheme khi kiểm tra một chuỗi, thì sẽ không


Tôi đoán một chút thời gian trôi qua, và bây giờ chúng tôi có một vài ngôn ngữ thực sự làm điều này. : D
Trejkaz

Câu trả lời:


4

Có vẻ như cách tốt nhất để có được sự chính xác là giữ cho các lập trình viên không thực hiện "hack chuỗi" ... việc viết các từ, dấu gạch ngang, đếm từ, biện minh, di chuyển con trỏ, v.v. Tất cả các khung UI hiện đại sẽ thực hiện công cụ này cho bạn những ngày này.

Nghĩa là, sự trừu tượng mà bạn thường làm việc có nhiều hơn một "đối tượng hiển thị đoạn", chẳng hạn như đối với GTK: http : // l Library.gnome.org/devel/pango/ sóng / pango-Time -Ojectject.html

chứ không phải là một chuỗi grapheme, chẳng hạn như: http : // l Library.gnome.org/devel/pango/urdy/pango-Glyph-Storage.html

Để có được chuỗi glyphs, bạn cần thông tin chỉ có sẵn ở cấp độ "xem", vì vậy hầu hết việc sử dụng chuỗi có thể không có thông tin này. Ví dụ, bạn phải biết phông chữ, vì phông chữ có thể có các chữ ghép khác nhau.

Ngoài loại vấn đề thực tế đó, glyphs có thể không phải là thứ bạn muốn.

Trong nhiều ngữ cảnh, bạn muốn sử dụng các thuộc tính Unicode thích hợp, được hiển thị trong API này, ví dụ: http : // l Library.gnome.org/devel/pango/urdy/pango-Text-Processing.html#PangoLogAttr

Như bạn có thể thấy từ cấu trúc đó (phản ánh các thuật toán Unicode) làm nhiều việc khác nhau ở các ranh giới glyph không chính xác hơn việc thực hiện chúng ở các ranh giới ký tự.

Hai thông số kỹ thuật này mô tả các thuật toán để tìm các loại ranh giới khác nhau:

Thực hiện xử lý văn bản liên quan đến việc tìm các ranh giới đó với các thuật toán và sau đó làm việc với các ranh giới.

Nếu bạn bắt đầu đào sâu về việc khó xử lý tất cả các ngôn ngữ một cách chính xác, bạn sẽ nhanh chóng nhận ra mình cần một thư viện xem toàn bộ đoạn văn và xử lý chúng đúng cách. Windows, Mac, Linux (Qt và GTK) và Java đều đi kèm với các phương tiện cho việc này, ví dụ như có http://site.icu-project.org/ .

Khi viết ứng dụng web, thật không may, bạn khá nhiều phải để trình duyệt (có thể được hệ điều hành trợ giúp) làm công cụ này, theo như tôi biết. Tất cả những gì bạn có thể làm trong JavaScript hoặc ở phía máy chủ là làm rối tung nó lên.

Có lẽ tôi đã tổng hợp câu trả lời là: hầu hết thao tác chuỗi trên văn bản ngôn ngữ tự nhiên bị hỏng, vì vậy không có nhiều điểm đáng lo ngại về lớp chuỗi, ngoài việc có thể có một phương thức không có phương thức nào trên đó ;-)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.