算法应该如何检查复合词是否可以从字典中的基本词派生出来?

问题描述 投票:0回答:1

我正在考虑如何构建一个跨语言词典,它存储“基本”单词(例如“创建”,“创建”等),并且不存储派生单词(例如“创建”, “创造”、“创造”、“创作”等)。它不存储派生词,而是存储某种规则,指定如何创建派生词。

一条规则可能是“如果单词以 -p 结尾,并且我们要添加 -ing,则执行 -pping”,因此“flip”变为“flipping”等。不将派生单词存储在字典中的原因英语中至少有数百万个这样的单词(只有几十万个“基本”单词),而在土耳其语等某些语言中,可能有大约无限数量的派生单词。

问题是,算法应该如何大致确定派生词是否在字典中?

我们可以有一个Trie来存储基本单词,但是前缀和后缀呢(暂时忽略中缀和外接符)呢?当组合点改变前一个块的结尾和/或后一个块的开始时(例如“翻转”在中间添加额外的“p”等)又如何?我主要想知道在执行此操作时是否需要执行前向/后向操作,或者我是否可以直接浏览前缀列表,然后是基本单词列表,然后是后缀列表。

对于“flipping”,我在基本词trie中看到“flip”,然后我们遇到“p”,没有不在字典中,所以检查后缀。如果最后一个片段以“p”结尾,后缀可以插入“p”...那么还记得最后一个字符吗?或者也许有更多的情况,它不仅仅是最后一个字符,而是最后几个字符...因此,反向遍历后缀“最后一个片段以”结尾的属性(可能是反向特里树),我们发现我们的单词以“p”结尾,我们有几个后缀(让我们假设)。现在如何过滤到正确的后缀?也许我们尝试所有后缀?尝试“-p-p-ed”,我们得到“翻转”,不,不匹配。尝试“-p-p-ing”,好吧,匹配,我们找到赢家。

到目前为止看来:

  1. 针对片段 trie 从左到右读取片段。
  2. 完成一个片段后,找到可以从下一个字母开始的下一个片段。
  3. 为所有片段构建一个特里树,并为它们可以开始的内容构建另一个特里树。
  4. 反向读取上一个片段中的“他们可以从什么开始”,如果匹配,则正向读取下一个片段。

类似这样的事情吗?你会如何实现这个目标?

algorithm dictionary
1个回答
0
投票

没有任何算法可以在没有任何额外信息的情况下绝对完成此任务,因为语言很奇怪。这有几个问题:

  1. 基本词与派生词是不明确的。为什么“创造”在这里被认为是一个基础词,你不能说它是从“创造”这个词派生出来的吗?在剩下的部分中,至少对于英语来说,我假设基本词是单数形式的非动名词名词、现在时的动词或形容词(“runny”不会被视为派生词) “跑”这个词的形式)
  2. 有很多例外,至少在英语中是这样。 “create”和“created”可以用硬编程规则来解决,但同样的规则可能会说“shed”是“she”的过去时。如果不确切知道一个单词是名词、动词还是形容词,或者什么时态,就不可能确定它是派生词还是基本词。

那么你如何解决这个问题呢?您可以使用 nltk 等工具找出某个单词的“词性”。我建议您使用 wordnet 生成单词的同义词集(同义词集),并找到具有多种含义的单词的词性(同样,例如 shed)。然后,删除所有仅充当动名词、复数名词或非现在时动词的单词。

© www.soinside.com 2019 - 2024. All rights reserved.