2010-05-29 37 views
10

Một thời gian trong tương lai gần, tôi sẽ cần phải thực hiện một số lượng từ vựng, hoặc nếu điều đó là không thể, một số ký tự chéo ngôn ngữ.Một thư viện/lớp học PHP để đếm từ bằng các ngôn ngữ khác nhau?

Theo số lượng từ, tôi muốn nói chính xác số từ có trong văn bản đã cho, lấy ngôn ngữ của văn bản. Ngôn ngữ của văn bản được đặt bởi người dùng và sẽ được giả định là chính xác.

Theo số ký tự, tôi có nghĩa là tổng số ký tự "có thể trong một từ" trong văn bản đã cho, với cùng thông tin ngôn ngữ được mô tả ở trên.

Tôi rất thích số lượng cũ, nhưng tôi biết những khó khăn liên quan. Tôi cũng biết rằng số sau dễ dàng hơn nhiều, nhưng rất thích cái cũ, nếu có thể.

Tôi rất thích nếu tôi chỉ cần nhìn vào tiếng Anh, nhưng tôi cần phải xem xét mọi ngôn ngữ ở đây, tiếng Trung, tiếng Hàn, tiếng Anh, tiếng Ả Rập, tiếng Hindi, v.v.

Tôi muốn biết nếu Stack Overflow có bất kỳ dẫn về nơi để bắt đầu tìm kiếm một sản phẩm/phương pháp hiện có để làm điều này trong PHP, như tôi là một người lười biếng lập trình tốt *

A simple test thể hiện như thế nào str_word_count với set_locale không hoạt động và chức năng từ trang str_word_count của php.net.

* http://blogoscoped.com/archive/2005-08-24-n14.html

+2

CJK sẽ là khó khăn nhất, vì họ không sử dụng không gian để từ riêng biệt. – Turnor

+0

Quan sát cấp bách. Đây là lý do tôi đăng câu hỏi của tôi ở đây;) –

+2

Đây là câu hỏi tôi đã hỏi trước đây như một câu trả lời: Bạn có thể cụ thể hơn về ý nghĩa của từ "đếm chữ" không? Bạn có muốn xác minh rằng một từ thực sự tồn tại trong từ điển của ngôn ngữ đó hay bạn chỉ đang tìm kiếm một số cụm từ được phân cách bằng dấu phân cách của ngôn ngữ đó? – Grantismo

Trả lời

5

chars Đếm được dễ dàng:

echo strlen('一个有十的字符的句子'); // 30 (WRONG!) 
echo strlen(utf8_decode('一个有十的字符的句子')); // 10 

lời Đếm là nơi mọi thứ bắt đầu để có được khôn lanh, đặc biệt đối với Trung Quốc, Nhật Bản và khác ngôn ngữ không sử dụng dấu cách (hoặc các ký tự "ranh giới từ" phổ biến khác) làm dấu tách từ. Tôi không nói tiếng Trung Quốc và tôi không hiểu cách đếm từ hoạt động bằng tiếng Trung, vì vậy bạn sẽ phải giáo dục tôi một chút - điều gì làm nên một từ trong những ngôn ngữ này? Có bất kỳ char hoặc bộ ký tự cụ thể nào không? Tôi nhớ đọc một cái gì đó liên quan đến khó khăn như thế nào để xác định các từ tiếng Nhật trong văn bản T9 nhưng không thể tìm thấy nó nữa.

Sau đây phải trả lại một cách chính xác các số từ trong ngôn ngữ sử dụng khoảng trắng hoặc ký tự chấm câu như từ dải phân cách:

count(preg_split('~[\p{Z}\p{P}]+~u', $string, null, PREG_SPLIT_NO_EMPTY)); 
+0

japanese_1000_lorem.docx đếm 29 từ thay vì 1000 tôi có $ string = preg_replace ('# \ {{{. *? \}}} # S', "", $ string); trước hàm đếm – ddjikic

+2

'.docx' phải là tệp nhị phân - vì vậy bạn có thể cần phải sử dụng trình phân tích cú pháp doc từ hoặc tệp văn bản thuần túy nếu bạn muốn thực hiện việc này. – Xeoncross

-1

Vâng, hãy thử:

<? 
function count_words($str){ 
    $words = 0; 
    $str = eregi_replace(" +", " ", $str); 
    $array = explode(" ", $str); 
    for($i=0;$i < count($array);$i++) 
     { 
     if (eregi("[0-9A-Za-zÀ-ÖØ-öø-ÿ]", $array[$i])) 
      $words++; 
    } 
    return $words; 
} 
echo count_words('This is the second one , it will count wrong as well" , it will count 12 instead of 11 because the comma is counted too.'); 
?> 
+2

Không làm việc ở tất cả cho Trung Quốc không may. – deceze

+1

Tôi đến từ Bồ Đào Nha, 6 giờ sáng ở đây ... Tôi đã ngủ nhưng ... sau khi tôi có thể điều chỉnh nó sang tiếng Trung và ngôn ngữ nào ... :) – Zuul

+1

Trung Quốc, Hàn Quốc, Nhật Bản (...) don ' t sử dụng "". –

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