Удлиненная проверка слова в предложении

Я хочу проверить в предложении, если есть удлиненные слова. Например, 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 объект.

Затем вы захотите проверить, для каждого слова в предложении,

  1. Это слово само по себе не является допустимым словом (т.е. word not in all_words); а также
  2. То есть, когда вы сокращаете все последовательные последовательности до одной или двух букв, новое слово является допустимым словом.

Вот один из способов, которым вы можете попытаться извлечь все возможности:

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 })
Другие вопросы по тегам