例如,
text = 'huwefggthisisastringhef'
我想根据字符串返回 True 或 False 。 E.g。
if detectEnglish(text) == True:
print('contains english')
答案 0 :(得分:3)
在文本中查找至少三个字符的所有英文单词
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 :(得分:0)
可能有更好的方法可以做到这一点,但如果您不需要任何有关将要找到的单词的信息,您可以这样做。
Github上的This项目在一个简单的文本文件中有超过466K个单词,你open该文本文件将其内容读入内存并执行look up单词组合
如果您愿意,可以将此文件排序为多维词典,但说实话,如果文本非常随机,则可能在计算上非常耗费。
我希望这个答案有点帮助。
答案 2 :(得分:0)
trie regex可以帮到你。您可以先按长度过滤字典,以避免匹配['h', 'u', 'we', 'f', 'g', 'g', 'this', 'is', 'as', 't', 'ring', 'he', 'f']
:
# 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']
创建正则表达式需要几秒钟,但搜索本身非常快,并且应该比简单地循环遍历每个子字符串更有效。
print(re.findall(trie.pattern(), "sdgfsdfgkjslfkgjsdkfgjsdbbqdsfghiddenwordsadfgsdfgsdfgsdfgsdtqtrwerthg"))
# ['hidden', 'words']
答案 3 :(得分:0)
根据接受的答案,这是一个我认为可以分享的小修改:
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)
返回包含单词和范围的字典。例如,可以用来检查哪些词是相互影响的等等。
{'this': range(7, 11),
'his': range(8, 11),
'sis': range(10, 13),
'string': range(14, 20),
'ring': range(16, 20)}