我有很多字符串。它们都只包含字符。字符和单词不是彼此分开的。一些角色形成英语单词,其他只是bufflegab。字符串可能不包含整个句子。
我需要找出哪些是用有效的英语演讲写的。我的意思是,String可以通过连接写得很好的英语单词来构建。我知道我可以用单词表做点什么。但这些话并不是彼此分开的。因此,测试每个可能的单词组合可能非常耗时。
我正在寻找一种高性能算法或方法,用于检查字符串是否由英语单词或英语语音构成。也许有些东西让我有机会在字符串中包含英语演讲。
你知道一种能帮助我的方法或算法吗? 像Sphinx之类的东西对我有帮助吗?
答案 0 :(得分:2)
这称为segmentation问题。
没有简单的方法可以解决这个问题。根据我对你的知识水平的猜测,我可以向你建议的是从你的词典中建立一个trie,并且在你第一次发现一个可能的词时,试着假设它是这个词。
如果稍后,你会发现这个词的最后一部分是乱码,那么你回溯到最后一次你决定一个字母序列是一个单词,并忽略那个单词。
答案 1 :(得分:2)
如果你的琴弦足够长或你的bufflegab足够奇怪,letter frequencies - 可能还有bigram频率,三角频率等 - 可能就足够了(而不是更一般的N-gram)。例如,某些浏览器使用它来猜测代码页。
答案 2 :(得分:1)
检查N-gram语言模型。
答案 3 :(得分:0)
狮身人面像可能不会帮助你。尝试使用Rabin-Karp算法。它对于标准搜索来说很糟糕,但应该适用于这个特定问题。基本上,你会想要一个英文单词词典,并希望用它来搜索。过大的字典仍然会很慢,但是如果你使用一个小字典来表达普通单词,只有当你点击普通单词时才会切换到一个大字典,你可能仍然不会得到太多的假阴性。
答案 4 :(得分:0)
为什么不将您的单词列表存储在Trie中。然后你遍历输入,在Trie中寻找匹配的单词 - 这可以非常有效地完成。如果找到一个,请前进到单词的末尾并继续。
答案 5 :(得分:0)
这取决于您想要的准确度,您需要的效率以及您正在处理的文本类型。