如何找到基本的,不变形的词进行搜索?
|
我在尝试编写一个搜索引擎时遇到麻烦,该引擎将一个单词的所有词尾变化都视为相同的基本单词。
因此,对于动词,它们都是相同的词根,是:
人数/人(例如am; is; are)
时态/语气,例如过去或将来时(例如,过去;将来;将会)
过去分词(例如一直;曾经)
现在的分词和动名词(例如,正在;不是很有趣;早于没有正确)
虚拟语气(例如可能;完成某件事至关重要;我希望如此)
然后,对于名词,单数形式和复数形式都应算作同一基本词[ᴇᴅɪᴛᴏʀ\'sɴᴏᴛᴇ:这通常被称为该词的引文形式。]
例如,对于“启用”,我不希望将“启用”和“启用”打印为单独的条目。这三个词都应该算作同一个基本词,动词使能。
我可以防止使用像这样的哈希打印重复项:
unless ($seenmatches{ $headmatches[$l] }++)
有人可以解释一下吗?在下面的评论中解释。
这不会阻止复数/过去的继续。有没有办法做到这一点,或者是某种完全不同的方法,也许是涉及到正则表达式和/或替换,然后是取消订阅的方法?
我无法用替换词来修改该单词,因为这样打印的内容将无法正确打印。尽管我还没有进入阶段,但最终我还是想包括不规则的过去时[ᴇᴅɪᴛᴏʀ\'sɴᴏᴛᴇ:和不规则的名词?]
我不确定您还需要什么来回答我的问题,所以请让我知道我无意中遗漏的任何内容,然后我将填写所有遗漏的内容以帮助您弄清楚。
没有找到相关结果
已邀请:
4 个回复
摊揉售
(或者更好的是
),它们是Porter提取器的稍有更新的版本 每个标记及其原始字符偏移量的开始/结尾都将被保留并建立索引,通常与原始文本的副本一起被标记之前。基本上,这是一个表,将术语文本与其原始文档相关联(通常作为标识符) 现在,当查询到达时,它也会被标记化并且每个标记都会被阻止,但是这次我们不在乎位置。我们根据已索引的令牌查找每个令牌,以查找发布(匹配的文档标识符)。现在,我们可以检索存储的开始/结束偏移量,以确定术语在原始文本中的位置。 因此,您确实丢失了索引的后缀(这是用来查找匹配文档的后缀),但是保留了这些文档的原始文本和偏移量,因此您可以根据需要进行查询突出显示和显示效果。 绝对是这项工作的正确工具。主要技巧是确保以相同的方式对待查询和文档。您可以修改原始文档,但实际上,您希望将其转换为类似于书本索引的内容,而不是将其转换为使用正则表达式的字符串-如果您确实在做搜索引擎的工作,那就是。如果愿意,可以在CPAN上查看出色的
模块,或者查看它最初源自的Apache Lucene项目。
混侩闯空坷
豆兢
我通过创建不同的形式来使用它(我想其中包括词干):
然后遍历
(围绕整个搜索引擎perl代码),到我有
的地方,我也放
。还有一些其他问题需要解决,但这只是一般的实现(尽管我有特殊情况) 有关错误的在线代码的一些调试信息,请参见:https://stackoverflow.com/questions/6459085/need-help-understanding-this-verb-tense-changing-code-please
矾醒忻
然后,您可以阻止foo.txt与
您可能希望在此步骤之前而不是之后运行其他词干分析器,因为如果它们很聪明并且使用词上下文来词干分析(尽管我怀疑它们确实如此),则它们将需要完整的词干来使用,而stem.pl逐字工作。