需要一个高效的算法来检查字符串是否包含英语语音

时间:2009-05-24 09:18:11

标签: algorithm

我有很多字符串。它们都只包含字符。字符和单词不是彼此分开的。一些角色形成英语单词,其他只是bufflegab。字符串可能不包含整个句子。

我需要找出哪些是用有效的英语演讲写的。我的意思是,String可以通过连接写得很好的英语单词来构建。我知道我可以用单词表做点什么。但这些话并不是彼此分开的。因此,测试每个可能的单词组合可能非常耗时。

我正在寻找一种高性能算法或方法,用于检查字符串是否由英语单词或英语语音构成。也许有些东西让我有机会在字符串中包含英语演讲。

你知道一种能帮助我的方法或算法吗? 像Sphinx之类的东西对我有帮助吗?

6 个答案:

答案 0 :(得分:2)

这称为segmentation问题。

没有简单的方法可以解决这个问题。根据我对你的知识水平的猜测,我可以向你建议的是从你的词典中建立一个trie,并且在你第一次发现一个可能的词时,试着假设它是这个词。

如果稍后,你会发现这个词的最后一部分是乱码,那么你回溯到最后一次你决定一个字母序列是一个单词,并忽略那个单词。

答案 1 :(得分:2)

如果你的琴弦足够长或你的bufflegab足够奇怪,letter frequencies - 可能还有bigram频率,三角频率等 - 可能就足够了(而不是更一般的N-gram)。例如,某些浏览器使用它来猜测代码页。

答案 2 :(得分:1)

检查N-gram语言模型。

请参阅http://en.wikipedia.org/wiki/N-gram

答案 3 :(得分:0)

狮身人面像可能不会帮助你。尝试使用Rabin-Karp算法。它对于标准搜索来说很糟糕,但应该适用于这个特定问题。基本上,你会想要一个英文单词词典,并希望用它来搜索。过大的字典仍然会很慢,但是如果你使用一个小字典来表达普通单词,只有当你点击普通单词时才会切换到一个大字典,你可能仍然不会得到太多的假阴性。

答案 4 :(得分:0)

为什么不将您的单词列表存储在Trie中。然后你遍历输入,在Trie中寻找匹配的单词 - 这可以非常有效地完成。如果找到一个,请前进到单词的末尾并继续。

答案 5 :(得分:0)

这取决于您想要的准确度,您需要的效率以及您正在处理的文本类型。