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

时间:2017-09-23 11:00:16

标签: python python-2.7

例如,

text = 'huwefggthisisastringhef'

我想根据字符串返回 True False 。 E.g。

if detectEnglish(text) == True:
    print('contains english')

4 个答案:

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