Jon*_*Jon 2 perl search nlp stemming lemmatization
我在尝试编写一个搜索引擎时遇到了麻烦,该搜索引擎将一个单词的所有变形视为相同的基本单词.
虚拟式(如 可能,关键的东西来完成,我希望它是)
例如,使用" 启用 ",我不希望将" 启用 "和" 启用 "打印为单独的条目.所有这三个都应该算作相同的基本单词,即动词启用.
我可以使用哈希来阻止打印重复项:
unless ($seenmatches{ $headmatches[$l] }++)
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下吗?在下面的评论中解释.
这并不能阻止复数/过去继续下去.有没有办法做到这一点,或者一些完全不同的方法,也许一个涉及正则表达式和/或替换,然后是一个unsub后来?
我不能用替换修改单词,因为那时打印不会正确打印出来.虽然我还没有进入舞台,但最终我还想包括不规则的过去时期[ ᴇᴅɪᴛᴏʀɴᴏᴛᴇɴᴏᴛᴇ:还有不规则名词?]以及
我不知道你还有什么需要回答我的问题,所以请让我知道任何我无意中遗漏的内容,并且我会填写任何遗漏的内容以帮助更清楚.
典型搜索引擎的工作方式如下:
Lingua::Stem(或更好Lingua::Stem::Snowball),这是Porter词干分析器的略微更新版本现在,当一个查询到达时,它也被标记化并且每个标记都被阻止,但这次我们并不关心位置.我们查找每个令牌与我们索引的那些令牌,以找到帖子(匹配文档标识符).我们现在可以检索存储的开始/结束偏移以确定术语在原始文本中的位置.
因此,您确实丢失了索引的后缀(这是用于查找匹配文档的内容),但您保留了原始文本和这些文档的偏移量,因此您可以根据需要进行查询突出显示和漂亮的显示内容.
Stemming绝对是这项工作的正确工具.主要技巧是确保以相同的方式处理查询和文档.您可以修改原始文档,但实际上,您希望将其转换为类似书籍索引的内容,而不是将其转换为使用正则表达式的字符串 - 如果您确实在使用搜索引擎,那就是.KinoSearch如果您愿意,请查看CPAN上的优秀模块,或查看最初派生自的Apache Lucene项目.