我有一个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>
示例文字:
ধিতাং ধিতাং বোলে এ মাদলে তান তোলে,
তার আনন্দ উচ্ছলে আকাশ ভোরে জোছনায়,
আই ছুটে সকলে এই মাটির ধরা তলে,
আজ হাসির কলরোলে নতুন জীবন গড়ি আই,
আয় রে আয় লগন বয়ে যায়,
মেঘ গুর গুর করে চাদের সীমানায়,
পারুল বোন ডাকে চম্পা ছুটে আয়,
বর্গিরা সব হাঁকে কোমর বেধে আয়,
আয় রে আয় আয় রে আয়,
আয় রে আয় আয় রে আয়