我正在用 Java 创建一个迷你搜索引擎,它基本上抓取用户指定的所有 RSS 提要,然后允许他或她选择一个单词进行搜索。由于 RSS 提要文档的数量相当有限,我正在考虑在用户输入他或她的搜索词之前先处理这些文档。我想通过创建将某些关键字链接到包含文章本身以及单词在文章中出现的次数的记录集合的哈希图来处理它们。但是,我将如何确定关键字?我如何分辨哪些词是无意义的,哪些是没有意义的?
4 回答
“我应该忽略哪些词?”的概念 一般称为停用词。最好的搜索引擎不使用停用词。如果我是乐队“The The”的粉丝,如果你的搜索引擎找不到他们,我会很沮丧。此外,天真的停用词实现可能会搞砸精确短语的搜索。
顺便说一句,您所说的哈希图称为倒排索引。我建议阅读这本(免费的在线)书,了解如何构建搜索引擎:http: //nlp.stanford.edu/IR-book/information-retrieval-book.html
一个小的提取物。来自 Ch 的 NLTK 的停用词。2:
还有一个停用词语料库,即高频词,例如 the、to 和 also 我们有时希望在进一步处理之前从文档中过滤掉。停用词通常很少有词汇内容,并且它们在文本中的存在无法将其与其他文本区分开来。
>>> from nltk.corpus import stopwords
>>> stopwords.words('english')
['a', "a's", 'able', 'about', 'above', 'according', 'accordingly', 'across',
'actually', 'after', 'afterwards', 'again', 'against', "ain't", 'all', 'allow',
'allows', 'almost', 'alone', 'along', 'already', 'also', 'although', 'always', ...]
停用词是您应该使用的一件事。网络上有很多停用词列表。
但是我正在写一个答案,因为之前的答案没有提到TF-IDF,它是衡量一个词在您的文档语料库中的重要性的指标。
如果一个词在文档中出现很多(词频)并且在其他文档中不频繁出现(逆文档频率),则它更有可能成为文档的关键字。这样,像 a、the、where 这样的词自然会被忽略,因为它们出现在每个文档中。
PS 在相关主题上,您可能会对其他列表感兴趣,例如脏话 :) PPS Hashmaps 是个好东西,但您还应该检查后缀树以完成您的任务。