我正在编写一个 php 脚本,它将解析一个文件 (synonyms.dat),并将同义词列表与其父词协调,大约 150k 词。
文件中的示例:
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
但我不知道如何链接每场比赛之间的字段,即同义词本身。
该脚本旨在运行一次,以便将所有信息适当地放入我的数据库中。对于那些感兴趣的人,我有一个数据库“synonym_index”,它保存了每个单词以及单词的唯一 ID。然后是另一个表“synonym_listing”,其中包含一个“word_id”列和一个“synomym_id”列,其中每一列都是 synonym_index 的外键。每个 word_id 可以有多个 synonym_id。
非常感谢您的帮助!