python检查输入的字符串是否含有空格_关于python:如何检测没有空格的字符串是否有英文单词?...

例如,

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值