gpt4 book ai didi

perl - 如何找到基本的、未变形的词进行搜索?

转载 作者:行者123 更新时间:2023-12-02 07:47:11 25 4
gpt4 key购买 nike

我在尝试编写一个搜索引擎时遇到了麻烦,该引擎将一个词的所有词形变化都视为同一个基本词。

  1. 所以对于动词来说,这些都是同一个词根,be:
    • 人数/人(例如 am; is; are)
    • 时态/语气,如过去时或将来时(例如 was; were; will be)
    • 过去分词(例如 has beenhad been)
    • 现在分词和动名词(例如 is being; wasn't being funny; being 不如正确重要)
    • 虚拟语气(例如 might be; critical that something be finished; I wish it < em>是)⁠ ⁠⁠

  2. 那么对于名词,单数形式和复数形式都应该算作同一个基本词strong> 这个词。]

例如,对于“enable”,我不想将“enables”和“enabled”打印为单独的条目。所有这三个都应该算作同一个基本词,即动词 enable

我可以使用像这样的散列来防止重复打印:

unless ($seenmatches{ $headmatches[$l] }++)
  1. 有人可以解释一下吗?在下面的评论中解释。

  2. 这并不能阻止复数/过去的继续。有没有办法做到这一点,或者有一些完全不同的方法,可能涉及正则表达式和/或替换,然后再取消订阅?

我不能用替换来修改这个词,因为这样打印就不会正确打印出来。虽然我还没有到这个阶段,但最终我想包括不规则的过去时 [ᴇᴅɪᴛᴏʀ's ɴᴏᴛᴇ: 和不规则的名词,也是吗?]

我不确定您还需要回答我的问题什么,所以请让我知道我无意中遗漏的任何内容,我会填写任何遗漏的部分以帮助您更清楚地回答。

最佳答案

典型搜索引擎的工作方式如下:

  • 输入字符串被标记化,在单词边界处被分割——字符偏移开始/结束与每个标记相关联
  • 然后提取每个标记 - 我将使用 Lingua::Stem(或者更好的是 Lingua::Stem::Snowball),它们是波特词干分析器
  • 在标记化之前,每个标记及其原始字符偏移开始/结束都被保留和索引,通常连同原始文本的副本。这基本上是一个表格,它将术语文本与其原始文档相关联(通常作为标识符)

现在,当查询到达时,它也被标记化并且每个标记都被提取出来,但这次我们不关心位置。我们根据已编制索引的标记查找每个标记,以找到帖子(匹配的文档标识符)。我们现在可以检索存储的开始/结束偏移量以确定术语在原始文本中的位置。

因此,您确实丢失了 索引 的后缀(这是用来定位匹配文档的),但您保留了这些文档的原始文本和偏移量,因此您可以进行查询突出显示和如果您需要,可以展示漂亮的东西。

词干提取绝对是这项工作的正确工具。主要技巧是确保以相同的方式处理查询和文档。您可以修改原始文档,但实际上,您希望将其转换成书后索引之类的东西,而不是转换成您使用正则表达式的字符串——如果您真的在做搜索引擎的事情,那就是。如果您愿意,可以查看 CPAN 上优秀的 KinoSearch 模块,或者查看它最初派生自的 Apache Lucene 项目。

关于perl - 如何找到基本的、未变形的词进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6191254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com