例如,
text = 'huwefggthisisastringhef'
我想根据字符串返回真或假。例如。
if detectEnglish(text) == True:
print('contains english')
号
首先尝试一个简单的问题:如何确定字符串是否是英语单词?
不确定这是否有帮助:stackoverflow.com/questions/3788870/…
要检测字符串中使用的语言,可以尝试使用以下库:pypi.python.org/pypi/langdetect
是的,我看过字典和Pyenchant的文本文件,但不知道如何实际地将其拆分以检查它是否是一个单词。
您可以从测试所有可能的子字符串开始
我想你应该看看wordlists dictionary,它列出了所有常用的单词,然后将它们匹配起来。
查找文本中至少三个字符长的所有英文单词
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个组合)。
这里有一行代码,将所有匹配项放入一个列表中(基于您的示例):[文本[i:j]对于范围(l)中的i,对于范围(l+1)中的j,如果len(文本[i:j])>=3和d.check(文本[i:j])]
基于接受的答案,这里有一个小修改,我认为可以分享:
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)}
一个三重橡皮可以帮助你。为了避免与['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']
号
创建regex需要几秒钟,但是搜索本身非常快,而且应该比简单地循环遍历每个子字符串更有效。
print(re.findall(trie.pattern(),"sdgfsdfgkjslfkgjsdkfgjsdbbqdsfghiddenwordsadfgsdfgsdfgsdfgsdtqtrwerthg"))
# ['hidden', 'words']
也许有更好的方法可以做到这一点,但是如果你不需要任何关于将要找到的单词的信息,你可以做到这一点。
Github上的这个项目在一个简单的文本文件中有超过466K个单词,您打开文本文件,将其内容读取到内存中,并查找字母组合。
如果你愿意的话,你可以将这个文件排序成多维字典,但是说实话,如果文本是随机的,那么计算起来可能会很困难。
我希望这个答案有点帮助。