2010-05-29 8 views
10

निकट भविष्य में कुछ समय मुझे एक क्रॉस-भाषा शब्द गणना लागू करने की आवश्यकता होगी, या यदि यह संभव नहीं है, तो एक क्रॉस-भाषा वर्ण गणना।विभिन्न भाषाओं में शब्दों की गणना करने के लिए एक PHP लाइब्रेरी/कक्षा?

शब्द गणना से मेरा मतलब है पाठ के भाषा को लेते हुए दिए गए पाठ में निहित शब्दों की सटीक गणना। पाठ की भाषा किसी उपयोगकर्ता द्वारा निर्धारित की जाती है, और इसे सही माना जाएगा।

चरित्र गणना से मेरा मतलब है ऊपर वर्णित उसी भाषा की जानकारी के साथ दिए गए पाठ में मौजूद "संभवतः एक शब्द" वर्णों की गिनती।

मैं पूर्व गणना को अधिक पसंद करूंगा, लेकिन मुझे शामिल कठिनाइयों से अवगत है। मुझे यह भी पता है कि बाद की गिनती बहुत आसान है, लेकिन यदि संभव हो तो पूर्व को बहुत पसंद करते हैं।

अगर मुझे सिर्फ अंग्रेजी देखना है, तो मुझे यह अच्छा लगेगा, लेकिन मुझे यहां हर भाषा, चीनी, कोरियाई, अंग्रेजी, अरबी, हिंदी आदि पर विचार करना होगा।

मुझे पता है कि अगर स्टैक ओवरफ़्लो जहां एक मौजूदा उत्पाद/विधि की तलाश में PHP में यह करने के लिए शुरू करने के लिए, के रूप में मैं एक अच्छा आलसी प्रोग्रामर *

A simple test set_locale साथ कैसे str_word_count दिखा रहा हूँ पर कोई सुराग नहीं है चाहते हैं काम नहीं करता है, और php.net के str_word_count पृष्ठ से एक फ़ंक्शन।

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

+2

CJK, trickiest होने के लिए, क्योंकि वे शब्द अलग करने के लिए रिक्त स्थान का प्रयोग नहीं करते जा रहे हैं। – Turnor

+0

अवलोकन अवलोकन। यही कारण है कि मैंने यहां अपना प्रश्न पोस्ट किया है;) –

+2

यह सवाल मैंने पहले उत्तर के रूप में पूछा था: क्या आप "शब्द गणना" से क्या मतलब चाहते हैं? क्या आप यह सत्यापित करना चाहते हैं कि उस शब्द के शब्दकोश में वास्तव में एक शब्द मौजूद है, या आप केवल उस भाषा के डिलीमीटर द्वारा अलग वाक्यांशों की गिनती की तलाश कर रहे हैं? – Grantismo

उत्तर

5

गिनती वर्ण है आसान:

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

गिनती शब्द चीनी, जापानी और अन्य के लिए है, जहां चीजें मुश्किल हो शुरू कर विशेष रूप से वे शब्द जो शब्द विभाजक के रूप में रिक्त स्थान (या अन्य सामान्य "शब्द सीमा" वर्ण) का उपयोग नहीं करते हैं। मैं चीनी नहीं बोलता और मुझे समझ में नहीं आता कि चीनी में शब्द गणना कैसे काम करती है, इसलिए आपको मुझे थोड़ा शिक्षित करना होगा - इन भाषाओं में क्या शब्द है? क्या यह कोई विशिष्ट चार या वर्णों का सेट है? मुझे टी 9 लेखन में जापानी शब्दों की पहचान करना कितना मुश्किल था, लेकिन यह अब और नहीं मिल रहा है।

निम्नलिखित सही ढंग से करने वाली भाषाओं के शब्द विभाजक के रूप में रिक्त स्थान या विराम चिह्न वर्ण का उपयोग में शब्दों की संख्या लौटना चाहिए:

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

japanese_1000_lorem.docx 1000 के बजाय 2 9 शब्दों की गिनती है मेरे पास $ string = preg_replace ('# \ {{{। *? \}}} # S', "", $ string) है; गिनती समारोह से पहले – ddjikic

+2

'.docx' एक द्विआधारी फ़ाइल होना चाहिए - इसलिए यदि आप ऐसा करना चाहते हैं तो आपको शायद एक शब्द दस्तावेज़ पार्सर या एक सादे पाठ फ़ाइल का उपयोग करने की आवश्यकता है। – Xeoncross

-1

ठीक है, कोशिश:

<? 
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

दुर्भाग्य से चीनी के लिए बिल्कुल काम नहीं करता है। – deceze

+1

मैं पुर्तगाल से हूं, यह यहाँ 6 बजे है ... मैंने अभी तक सोया था ... लेकिन जब मैं इसे चीनी और इसे कभी भी भाषा में अनुकूलित कर सकता हूं ... :) – Zuul

+1

चीनी, कोरियाई, जापानी (...) डॉन ' टी का प्रयोग नहीं करते हैं। –

संबंधित मुद्दे