如何计算字符串中出现(外来)单词的次数?

时间:2016-08-11 04:34:41

标签: php regex

我用英语工作很好,但它不能用于其他语言。

$lemma = "का";
$text = 'उस का नाम रवि है। काम का समय आ गया।';
$pattern = '/\b' . $lemma . '\b/';
$hits = preg_match_all($pattern, $text, $matches);
在这个例子中,$ hits应该是2。我发现了一些关于使用' \ u'或某事,但无法使其发挥作用。

-----编辑 上面的示例似乎没有足够的文本,所以我花了更长的时间来更好地测试解决方案。

$lemma = "में";
$text = 'पेत्रउस्कास इवाल्डैस ने लाइटवेट कैटेगरी में लंदन ओलंपिक 2012 में कांस्य पदक जीता था. मनोज कुमार लंदन ओलंपिक में भी खेले थे लेकिन वो क्वार्टर-फ़ाइनल में अपनी जगह नहीं बना सके थे. मनोज ने ताजीकिस्तान राखिमॉव शाक्वाकात्झॉन को एआईबीए वर्ल्ड ओलंपिक क्वालिफ़िकेशन में हराकर रियो ओलंपिक में प्रवेश पाया था. इससे पहले रियो ओलंपिक में 75 किलो भार वर्ग में भारतीय मुक्केबाज़ विकास कृष्ण यादव ने प्री क्वार्टर फ़ाइनल में जगह बना ली है. गुरुवार को 56 किलो भार वर्ग में मुक्केबाज़ शिवा थापा रियो ओलंपिक में अपना पहला मुकाबला खेलने के लिए रिंग में उतरेंगे. मनोज कुमार का अगला मुकाबला रविवार को प्री-क्वार्टर फ़ाइनल में उज़्बेकिस्तान के फ़ज़लीद्दीन ग़ैब्नाज़रॉफ से होगा.';
$pattern = '/\b('.$lemma.')\b/';
$hits = preg_match_all($pattern, $text, $matches);
echo count($matches);

"में"应该给13,"ली"应该给1。

2 个答案:

答案 0 :(得分:1)

使用foreachexplode

$lemma = "का";
$text = 'उस का नाम रवि है। काम का समय आ गया।';

function findOccurings($text, $search) {
    $words = explode(' ', $text);

    $times = 0;
    foreach ($words as $word) {
        if ($word == $search) {
            $times++;
        }
    }
    return $times;
}

var_dump(findOccurings($text, $lemma));

// Output: int(2)

答案 1 :(得分:0)

我找到了一个基于@ Zeus答案的解决方案。它似乎适用于我放入其中的所有内容。我可能需要添加到/[\s.,\“\”和/以确保一切正常。

$hits = 0;

foreach($documents as $document){
    $text = $document->getText();
    $words = preg_split("/[\s.,\"\']+/", $text);

    foreach ($words as $word) {
        if ($word == $lemma) {
            $hits++;
    }
}