2009-10-22 27 views
16

Tôi muốn làm cho công cụ tìm kiếm văn bản đầy đủ của MySQL có văn bản tiếng Nhật và tiếng Trung, cũng như bất kỳ ngôn ngữ nào khác. Vấn đề là những ngôn ngữ này và có lẽ những ngôn ngữ khác thường không có khoảng trắng giữa các từ. Tìm kiếm không hữu ích khi bạn phải nhập cùng một câu như trong văn bản.Từ ngắt bằng ngôn ngữ không có dấu cách giữa các từ (ví dụ: Châu Á)?

Tôi không thể chỉ đặt không gian giữa mọi nhân vật vì tiếng Anh cũng phải hoạt động. Tôi muốn giải quyết vấn đề này với PHP hoặc MySQL.

Tôi có thể định cấu hình MySQL để nhận dạng các ký tự phải là các đơn vị lập chỉ mục của riêng chúng không? Có một mô-đun PHP có thể nhận ra các ký tự này vì vậy tôi chỉ có thể ném không gian xung quanh chúng cho chỉ mục?

Cập nhật

Một giải pháp phần:

$string_with_spaces = 
    preg_replace("/[".json_decode('"\u4e00"')."-".json_decode('"\uface"')."]/", 
    " $0 ", $string_without_spaces); 

Điều này làm cho một lớp nhân vật ra khỏi ít nhất một số trong những nhân vật tôi cần phải điều trị đặc biệt. Tôi có lẽ nên đề cập đến, nó là chấp nhận được để munge văn bản được lập chỉ mục.

Có ai biết tất cả các phạm vi ký tự mà tôi cần để chèn khoảng trắng xung quanh không?

Ngoài ra, phải có cách tốt hơn, di động để thể hiện các ký tự đó trong PHP? Mã nguồn trong Unicode mã hóa không phải là lý tưởng; Tôi sẽ không nhận ra tất cả các nhân vật; chúng có thể không hiển thị trên tất cả các máy tôi phải sử dụng.

+3

Các ngôn ngữ hiện đại khác mà không sử dụng không gian giữa các từ là người Thái, Lào, Khmer (Campuchia), và Miến Điện (Myanmar). Trong tiếng Việt có một vấn đề liên quan đến không gian được sử dụng giữa tất cả các âm tiết ngoại trừ các từ tiếng nước ngoài. – hippietrail

Trả lời

15

Lời chia cho các ngôn ngữ nêu đòi hỏi một cách tiếp cận ngôn ngữ , ví dụ một mà sử dụng một cuốn từ điển cùng với sự hiểu biết về cơ bản bắt nguồn quy tắc.

Tôi đã nghe nói về các ứng dụng tìm kiếm văn bản hoàn toàn thành công, chỉ đơn giản là tách từng ký tự thành một từ riêng biệt, bằng tiếng Trung, chỉ áp dụng cùng một "mã thông báo" của tiêu chí tìm kiếm được cung cấp bởi người dùng cuối. Các công cụ tìm kiếm sau đó cung cấp một thứ hạng tốt hơn cho các tài liệu cung cấp các ký tự-từ theo thứ tự như các tiêu chí tìm kiếm. Tôi không chắc chắn điều này có thể được mở rộng sang ngôn ngữ như tiếng Nhật, vì bộ ký tự Hirakana và Katagana làm cho văn bản giống như ngôn ngữ châu Âu với một bảng chữ cái ngắn.

EDIT:
Tài
Từ này phá vỡ vấn đề, cũng như các vấn đề có liên quan, như vậy là không tầm thường rằng toàn bộ cuốn sách được viết về nó. Xem ví dụ CJKV Information Processing (CJKV là viết tắt của tiếng Trung, tiếng Nhật, tiếng Hàn và tiếng Việt; bạn cũng có thể sử dụng từ khóa CJK, trong nhiều văn bản, tiếng Việt không được thảo luận). Xem thêm Word Breaking in Japanese is hard để có một người nhắn tin về chủ đề này.
Một cách hiểu biết, phần lớn tài liệu bao gồm chủ đề này được viết bằng một trong những ngôn ngữ bản địa cơ bản, và do đó được sử dụng hạn chế cho những người không có sự lưu loát tương đối bằng các ngôn ngữ này. Vì lý do đó, và cũng để giúp bạn xác nhận công cụ tìm kiếm khi bạn bắt đầu triển khai logic ngắt từ, bạn nên tìm kiếm sự trợ giúp của một hoặc hai người bản xứ.

ý tưởng khác nhau
Ý tưởng của bạn của ký tự xác định những cách có hệ thống bao hàm một lời chia (nói dấu ngoặc kép, dấu ngoặc đơn, ký tự gạch nối giống như và như vậy) là tốt, và đó có lẽ là một heuristic, được sử dụng bởi một số các máy cắt từ chuyên nghiệp. Tuy nhiên, bạn nên tìm kiếm một nguồn có thẩm quyền cho một danh sách như vậy, thay vì lắp ráp một nguồn từ đầu, dựa trên những phát hiện giai thoại.
Ý tưởng liên quan là ngắt lời tại số Chuyển đổi Kana-sang-Kanji (nhưng tôi không đoán theo cách khác), và có thể tại Chuyển tiếp Hiragana-to-Katakana hoặc ngược lại.
Không liên quan đến từ vi phạm đúng cách, chỉ mục có thể [-hoặc không- ;-)] được hưởng lợi từ việc chuyển đổi có hệ thống của mỗi ký tự hiragana thành ký tự katakana tương ứng. Chỉ là một ý tưởng không được giáo dục! Tôi không biết đủ về ngôn ngữ Nhật Bản để biết liệu điều đó có giúp ích hay không; bằng trực giác, nó sẽ là lỏng lẻo giống như việc chuyển đổi có hệ thống các chữ cái nổi bật và các chữ cái không được nhấn mạnh tương ứng, như được thực hành với một số ngôn ngữ châu Âu.

Có lẽ ý tưởng tôi đã đề cập trước đó, có thể thay đổi một chút, ví dụ bằng cách giữ các ký tự kana liên tiếp với nhau, và sau đó là một số quy tắc khác ... và tạo ra một công cụ tìm kiếm hoàn hảo nhưng thực tế đủ.

Đừng thất vọng nếu đây không phải là trường hợp ... Như đã nói điều này là xa tầm thường, và nó có thể giúp bạn tiết kiệm thời gian và tiền bạc, trong dài hạn, bằng cách tạm dừng và đọc một hoặc hai cuốn sách. Một lý do khác để thử và tìm hiểu thêm về "lý thuyết" và thực hành tốt nhất, đó là vào lúc này bạn dường như tập trung vào từ phá vỡ nhưng ngay sau đó, các công cụ tìm kiếm cũng có thể được hưởng lợi từ bắt nguồn nhận thức ; thực sự hai vấn đề này, ít nhất là về ngôn ngữ, có liên quan và có thể được lợi từ việc được xử lý song song.

Chúc may mắn về nỗ lực đáng thất vọng nhưng xứng đáng này.

+0

Hoàn toàn có thể chấp nhận tôi để chia nhỏ các từ ghép. Tôi chỉ cần biết khi nào để tách biểu tượng. Xem sớm của tôi để được thực hiện cập nhật cho một giải pháp một phần. –

+0

Tha thứ cho tôi. Tôi cũng muốn nói lời cảm ơn vì thời gian của bạn. :) –

+0

@Joe: Bạn được chào đón. Tôi tình cờ quan tâm đến ngôn ngữ học và NLP nhưng rất ít, rất ít kiến ​​thức cụ thể đối với ngôn ngữ CJK. Làm đọc chỉnh sửa của tôi khi tôi thêm một số từ khóa và tài liệu tham khảo trực tuyến có thể giúp bạn tìm kiếm.Chúc may mắn :-) – mjv

1

Một năm sau đó, và có thể bạn không cần điều này nữa nhưng mã ở trang sau có thể có một số gợi ý cho những gì bạn muốn (ed) để thực hiện:

http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/spamfilter/japanese-tokenizer.el.txt

Nếu bạn thực hiện bất kỳ tiến bộ nào sau các bài đăng trên trong tìm kiếm của riêng bạn Tôi chắc chắn những người khác sẽ quan tâm để biết.

(Edited để nói có một câu trả lời tốt hơn ở đây: How to classify Japanese characters as either kanji or kana?)

+1

Hóa ra việc nhận ra phạm vi ký tự trong ví dụ trong bản cập nhật cho câu hỏi của tôi đã giải quyết được vấn đề trong tất cả các trường hợp đã xuất hiện từ trước đến giờ. Ít nhất, số lượng người dùng nhỏ của chúng tôi mà những vấn đề này được thỏa mãn. –

+0

Tôi mong đợi ngày mà giải pháp này không còn đủ nữa và tôi có thể giải quyết vấn đề một cách hoàn toàn và thú vị hơn. –

+0

Cảm ơn bạn đã dành thời gian. –

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