我正在寻找一种方法来区分句子中的复合词。 虽然这在英语中很容易,因为复合词的单词之间有破折号(例如媳妇),但在波斯语等其他语言中则不一样。为了检测句子中的单词,我们将在单词之间寻找空格。想象一下,没有破折号将这些单词连接在一起,而是在它们之间有一个空格。幸运的是,我们在数据库中已经有了“女儿”和“女婿”的不同记录。现在我正在寻找一种算法或SQL查询,它首先会查看更大的单词块,比如“女婿”并检查它们是否存在。如果没有找到任何东西,那么它应该开始寻找每个单词。
另一个例子是数字。想象一下,我们有一个像“1 2 3 4 5 6”这样的字符串。每个数字在数据库中都有一个与值对应的记录。但是,对于诸如“2 3”的组合,还有额外的记录。我想首先获取更大块的记录,如果没有记录,则检查每个数字。请再次注意,算法必须自动区分化合物与单数。
答案 0 :(得分:2)
您可以从字典中构建定向非循环字图(DAWG)。基本上,这是一个你可以很快搜索的特里。构建完成后,您可以非常轻松地搜索单词或复合单词。
要搜索,请取出单词的第一个字母,然后从树的根节点开始,查看是否有转换到该字母。当您匹配每个字母时,您将获得下一个字母,并查看该字母的树的当前节点是否有转换。如果你到达字符串的末尾,那么你知道你找到了一个单词。
如果到达当前节点没有转换的点,则:
请注意,您可能不希望将DAWG实现为数据库中的记录。
答案 1 :(得分:1)
对于英语,使用全文搜索二进制树(霍夫曼编码树)解决了这个问题,它利用频率分析将最常用的单词/字母放在树顶上。
但对波斯人来说,实施这样的算法要困难得多,因为波斯语字母组合起来并且不像英语那样离散。因此,要回答有关算法的问题,您必须根据频率制作一个霍夫曼编码树,以便能够搜索单词。