У меня есть код в PHP для поиска ключевых слов из бенгальских текстов. Это дает вывод, но я сталкиваюсь с тремя проблемами —
Это не игнорирование массива стоп-слов, который я объявил.
Предполагается дать 10 ключевых слов, но иногда дает 11/12/13 ключевых слов.
Иногда дает те же слова, что и вывод.
Это мой код:
<form enctype="multipart/form-data" action="?action=extractKeyWords" method="POST">
<div class="heading1">গীতিকার অনুসন্ধান</div>
<div class="heading2">Find Out Lyricist</div>
<label>Insert a text file of Bengali song lyrics</label>
<input type="file" name="uploadedfile" class="upload">
<input type="submit" value="GO!" name="btn" class="button"><?php
if (isset($_GET['action']) == 'extractKeyWords') {
$target_path = $_FILES['uploadedfile']['name'];
function extractKeyWords($string) {
mb_internal_encoding('UTF-8');
$stopwords = array('যায়','এরপর', 'আমি', 'একটি', 'এবং', 'আর', 'অথবা', 'তুমি', 'সে', 'ওরা', 'এ', 'ঐ', 'ও', 'কিভাবে', 'মধ্যে', 'থেকে', 'যেভাবে', 'হয়', 'বা', 'এর', 'এক', 'তার', 'উপর', 'ওখানে', 'সেখানে', 'তা', 'সেথা', 'ছিল', 'হবে', 'কি', 'কখন', 'কোথায়', 'কে', 'সাথে');
//$string = preg_replace('/[\pP]/u', '', trim(preg_replace('/\s\s+/iu', '', mb_strtolower($string))));
$string = preg_replace('/\s\s+/i', '', $string);
$matchWords = array_filter(explode(' ', $string), function ($item) use ($stopwords) {
return !($item == '' || in_array($item, $stopwords) || mb_strlen($item) <= 2 || is_numeric($item));
});
$wordCountArr = array_count_values($matchWords);
arsort($wordCountArr);
$wordCountArr = array_slice($wordCountArr, 0, 10);
return $wordCountArr;
}
$file = file_get_contents($target_path, true);
$words = extractKeyWords($file);
Print "<div class='output'>Keywords: " . implode(',', array_keys($words)) . "<div>";
}
?>
</form>
Пример текста:
ধিতাং ধিতাং বোলে এ মাদলে তান তোলে,
তার আনন্দ উচ্ছলে আকাশ ভোরে জোছনায়,
আই ছুটে সকলে এই মাটির ধরা তলে,
আজ হাসির কলরোলে নতুন জীবন গড়ি আই,
আয় রে আয় লগন বয়ে যায়,
মেঘ গুর গুর করে চাদের সীমানায়,
পারুল বোন ডাকে চম্পা ছুটে আয়,
বর্গিরা সব হাঁকে কোমর বেধে আয়,
আয় রে আয় আয় রে আয়,
আয় রে আয় আয় রে আয়
preg_replace()
не будет правильно работать с многобайтовыми строками, которые вы используете.
Вы должны вместо этого использовать mb_ereg_replace()
документированный Вот.
Других решений пока нет …