我想为PHP中的类似单词制作一个文本扫描器,但我不知道从哪里开始。扫描仪必须扫描一个段落并指出数据库中的匹配项,或者提出有助于使该段落更好的特定单词。
起初我以为我可以使用数据库和搜索引擎脚本,但有人告诉我这不是这样做的方法。
有人可以指出我正确的方向,以便我开始工作吗?
在文本中搜索相似之处可能是一项非常艰苦的工作。如果您想搜索段落,然后检查数据库中是否有类似的文本,我建议使用"tfidf"算法。我在论文中使用它,它确实工作得很好。
但是,没有"主"算法可以完成您需要的一切。这是大量的研究,它总是取决于你将使用的文本的属性。一些关于NLP的知识也可以帮助解决这些问题。
为了只找到单词相似性,我会使用这样的东西。希望他的帮助。
我只是发布了另一个答案,因为我的第一个答案在 OP 评论之后是错误的,而且它有太多评论。
首先,您需要推断段落中的每个单词,例如:
$words_array = explode(" ", $paragraph);
然后你需要删除特殊字符,斜杠,点,逗号等(可能使用str_replace())。
在第二步中,您需要构建一个同义词数据库,如下所示:
| id | word | synonyms |
| 0 | car | vehicle |
| 1 | car | transport |
然后做类似的事情(对于段落的每个单词):
SELECT synonyms FROM table WHERE word="car"
在此之后,您可以获取结果。
但这仅仅是个开始。您需要优化此方法。示例:您可以在搜索车辆时执行此操作,它会返回汽车。运输也是如此。这取决于你!
你已经尝试过similar_text()吗?它非常易于使用,您可以轻松地将其适应使用数据库(其中数据库可以是文本文件,SQL数据库甚至数组)。
快速示例:
// you have to call this function multiple times for each word of the paragraph and for each word of your DB of suggestions
function suggest ($word_of_the_paragraph, $word_taken_from_a_DB) {
similar_text($word_of_the_paragraph, $word_taken_from_a_DB, $percent);
if ($percent >= $threshold) {
echo $word_taken_from_a_DB; // this is the suggested word
}
}