How do I detect whether a string with no whitespace has any English words?
例如,
1 | text = 'huwefggthisisastringhef' |
我想根据字符串返回真或假。例如。
1 2 | if detectEnglish(text) == True: print('contains english') |
号
查找文本中至少三个字符长的所有英文单词
1 2 3 4 5 6 7 8 9 10 | import enchant d = enchant.Dict('en_US') text = 'huwefggthisisastringhef' l = len(text) for i in range(l): for j in range(i+3, l+1): if d.check(text[i:j]): print(text[i:j]) |
通过测试所有可设置位置的子字符串来实现这一点(对于23个字符的长字符串,只有231个组合)。
基于接受的答案,这里有一个小修改,我认为可以分享:
1 2 3 4 5 6 7 8 | import enchant d = enchant.Dict('en_US') text = 'huwefggthisisastringhef' l = len(text) words = {text[i:j]:range(i,j) for i in range(l) for j in range(l+1) if len(text[i:j]) >=3 and d.check(text[i:j])} print(words) |
。
返回包含单词和范围的字典。例如可以用来检查哪些单词有意思等等。
1 2 3 4 5 | {'this': range(7, 11), 'his': range(8, 11), 'sis': range(10, 13), 'string': range(14, 20), 'ring': range(16, 20)} |
一个三重橡皮可以帮助你。为了避免与
1 2 3 4 5 6 7 8 9 10 11 12 13 | # encoding: utf-8 import re from trie import Trie with open('/usr/share/dict/american-english') as wordbook: english_words = [word.strip().lower() for word in wordbook if len(word.strip()) >= 3] trie = Trie() for word in english_words: trie.add(word) test_word ="huwefggthisisastringhef" print(re.findall(trie.pattern(), test_word)) # ['this', 'string'] |
号
创建regex需要几秒钟,但是搜索本身非常快,而且应该比简单地循环遍历每个子字符串更有效。
1 2 | print(re.findall(trie.pattern(),"sdgfsdfgkjslfkgjsdkfgjsdbbqdsfghiddenwordsadfgsdfgsdfgsdfgsdtqtrwerthg")) # ['hidden', 'words'] |
也许有更好的方法可以做到这一点,但是如果你不需要任何关于将要找到的单词的信息,你可以做到这一点。
Github上的这个项目在一个简单的文本文件中有超过466K个单词,您打开文本文件,将其内容读取到内存中,并查找字母组合。
如果你愿意的话,你可以将这个文件排序成多维字典,但是说实话,如果文本是随机的,那么计算起来可能会很困难。
我希望这个答案有点帮助。