ファイル (synonyms.dat) を解析し、同義語のリストを親語と調整する PHP スクリプトを作成しています。約 15 万語です。
ファイルの例:
1|2
(adj)|one|i|ane|cardinal
(noun)|one|I|ace|single|unity|digit|figure
1-dodecanol|1
(noun)|lauryl alcohol|alcohol
1-hitter|1
(noun)|one-hitter|baseball|baseball game|ball
10|2
(adj)|ten|x|cardinal
(noun)|ten|X|tenner|decade|large integer
100|2
(adj)|hundred|a hundred|one hundred|c|cardinal
(noun)|hundred|C|century|one C|centred|large integer
1000|2
(adj)|thousand|a thousand|one thousand|m|k|cardinal
(noun)|thousand|one thousand|M|K|chiliad|G|grand|thou|yard|large integer
**10000|1
(noun)|ten thousand|myriad|large**
上記の例では、万、無数、大を 1000 という単語にリンクしたいと考えています。
file_get_contents を使用して .dat ファイルをメモリに読み込み、\n でファイルを展開し、さまざまな配列検索手法を使用して「親」の単語と同義語を見つけるさまざまな方法を試しました。ただし、これは非常に遅く、多くの場合、Web サーバーがクラッシュすることはありません。
私がする必要があるのは、 preg_match_all を使用して文字列を分解し、文字列を反復処理して、適切な場所にデータベースに挿入することだと思います。
$contents = file_get_contents($page);
preg_match_all("/([^\s]+)\|[0-9].*/",$contents,$out, PREG_SET_ORDER);
これはそれぞれにマッチします
1|2
1-dodecanol|1
1-hitter|1
しかし、各一致の間にフィールドをリンクする方法がわかりません。つまり、シノニム自体です。
このスクリプトは、データベースにすべての情報を適切に取得するために、1 回実行することを目的としています。興味のある方のために、単語だけでなく、各単語の一意の ID を保持するデータベース 'synonym_index' を用意しています。次に、「word_id」列と「synomym_id」列を含む別のテーブル「synonym_listing」。各列は synonym_index への外部キーです。各 word_id に対して複数の synonym_id が存在する場合があります。
あなたの助けは大歓迎です!