Удлиненная проверка слова в предложении
Я хочу проверить в предложении, если есть удлиненные слова. Например, soooo, toooo, thaaatttt и т. Д. Теперь я не знаю, что пользователь может печатать, потому что у меня есть список предложений, которые могут иметь или не иметь удлиненные слова. Как мне это проверить в python. Я новичок в питоне.
4 ответа
У @HughBothwell была хорошая идея. Насколько я знаю, нет ни одного английского слова с такой же буквой, повторяющейся три раза подряд. Итак, вы можете искать слова, которые делают это:
>>> from re import search
>>> mystr = "word word soooo word tooo thaaatttt word"
>>> [x for x in mystr.split() if search(r'(?i)[a-z]\1\1+', x)]
['soooo,', 'tooo', 'thaaatttt']
>>>
Все, что вы найдете, будет удлиненными словами.
Попробуй это:
import re
s1 = "This has no long words"
s2 = "This has oooone long word"
def has_long(sentence):
elong = re.compile("([a-zA-Z])\\1{2,}")
return bool(elong.search(sentence))
print has_long(s1)
False
print has_long(s2)
True
Ну, вы можете составить список каждого удлиненного слова логически возможно. Затем переберите слова в предложении, а затем слова в списке, чтобы найти удлиненные слова.
sentence = "Hoow arre you doing?"
elongated = ["hoow",'arre','youu','yoou','meee'] #You will need to have a much larger list
for word in sentence:
word = word.lower()
for e_word in elongated:
if e_word == word:
print "Found an elongated word!"
Если вы хотите сделать то, что сказал Хью Ботвелл, то:
sentence = "Hooow arrre you doooing?"
elongations = ["aaa","ooo","rrr","bbb","ccc"]#continue for all the letters
for word in sentence:
for x in elongations:
if x in word.lower():
print '"'+word+'" is an elongated word'
Вам необходимо иметь ссылку на действительные английские слова. В системах *NIX вы можете использовать /etc/share/dict/words
или же /usr/share/dict/words
или эквивалентный и сохранить все слова в set
объект.
Затем вы захотите проверить, для каждого слова в предложении,
- Это слово само по себе не является допустимым словом (т.е.
word not in all_words
); а также - То есть, когда вы сокращаете все последовательные последовательности до одной или двух букв, новое слово является допустимым словом.
Вот один из способов, которым вы можете попытаться извлечь все возможности:
import re
import itertools
regex = re.compile(r'\w\1\1')
all_words = set(get_all_words())
def without_elongations(word):
while re.search(regex, word) is not None:
replacing_with_one_letter = re.sub(regex, r'\1', word, 1)
replacing_with_two_letters = re.sub(regex, r'\1\1', word, 1)
return list(itertools.chain(
without_elongations(replacing_with_one_letter),
without_elongations(replacing_with_two_letters),
))
for word in sentence.split():
if word not in all_words:
if any(map(lambda w: w in all_words, without_elongations(word)):
print('%(word) is elongated', { 'word': word })