私はmySQLとPHPに少し慣れていません。語源辞書でテキストの単語を検索する小さなプログラムがあります。-- github のソースはこちら。1 秒あたり 1 ~ 3 語しか検索できません。これは実際の制限です。特に、1,000 語を超えるテキストを分析しようとしている場合はそうです。このプロセスをスピードアップできるように、クエリまたはデータベースをより適切に構成する方法はありますか?
単語を検索する関数:
function lookup($word) {
//connect to database
$query="SELECT parent_lang FROM etym_dict WHERE word=\"$word\" and word_lang=\"eng\""; //making this English-only for now
//debug_print("<p>Query is: $query</p>");
$result=dbquery($query)
or die("Failed to look up words in database.");
$parent_lang=mysqli_fetch_array($result);
$parent_lang=$parent_lang[0];
return $parent_lang;
}
その関数を呼び出すもの:
foreach (array_keys($results) as $word) {
$parent_lang=lookup($word);
if (!empty($parent_lang)) {
$parent_langs[]=array($word,$parent_lang,$results[$word]);
debug_print("$word, ");
} else {
$derivation=lookup_derivation($word);
$has_derivation= (strlen($derivation)>0) ? TRUE : FALSE;
if ($has_derivation) {
$parent_lang=lookup($derivation);
}
if(!empty($parent_lang) && $has_derivation) {
debug_print("<span class=\"blue\">$word ($derivation)</span>, ");
} else if(!empty($parent_lang)) {
$parent_langs[]=array($word,$parent_lang,$results[$word]);
debug_print("<span class=\"blue\">$word</span>, ");
} else {
$not_in_dict[]=$word;
debug_print("<span class=\"red\">$word");
if ($has_derivation) {
debug_print("/$derivation</span>, ");
} else {
debug_print("</span>, ");
}
}
}
}
データベースクエリ関数:
function dbquery($sql) {
GLOBAL $dbc;
$result=mysqli_query($dbc,$sql);
return $result;
}
データベース接続機能:
function dbconnect() {
$dbc=mysqli_connect(
... // redacted
) or die ('Error connecting to database.');
return $dbc;
}