关于python:如何检测没有空格的字符串是否有英文单词?

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)}


一个三重橡皮可以帮助你。为了避免与['h', 'u', 'we', 'f', 'g', 'g', 'this', 'is', 'as', 't', 'ring', 'he', 'f']匹配,可以先按长度过滤单词簿:

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个单词,您打开文本文件,将其内容读取到内存中,并查找字母组合。

如果你愿意的话,你可以将这个文件排序成多维字典,但是说实话,如果文本是随机的,那么计算起来可能会很困难。

我希望这个答案有点帮助。