输入问题时,stackoverflow会向您显示一个它认为可能涵盖同一主题的问题列表.我在其他网站或其他程序中也看到了类似的功能(例如帮助文件系统),但我自己从未编写过类似的东西.现在我很想知道用什么算法.
我想到的第一种方法是将短语分成单词并查找包含这些单词的短语.在你这样做之前,你可能想丢掉无关紧要的词(比如'the','a','do'等),然后你会想要对结果进行排名.
嘿,等等 - 让我们为网页做,然后我们可以有一个... watchamacallit ... - 一个"搜索引擎",然后我们可以出售广告,然后......
不,说真的,解决这个问题的常用方法是什么?
一种方法是所谓的词袋模型.
正如您猜测的那样,首先计算文本中出现的单词次数(通常称为NLP-lingo中的文档).然后你扔掉所谓的停用词,比如"the","a","or"等等.
你留下了文字和字数.这样做一段时间后,您会得到一整套出现在文档中的单词.然后,您可以为这些单词创建索引:"aardvark"为1,"apple"为2,...,"z-index"为70092.
现在你可以拿出你的文字袋并将它们变成矢量.例如,如果您的文档包含两个针对aardvark的引用而没有其他内容,则它将如下所示:
[2 0 0 ... 70k zeroes ... 0].
在此之后,您可以使用点积计算两个向量之间的"角度" .角度越小,文件越近.
这是一个简单的版本,还有其他更先进的技术.愿维基百科和你在一起.