Вы можете попробовать проверить орфографию слова, например, с помощью pyspellchecker
(pip install pyspellchecker)
from spellchecker import SpellChecker
spell = SpellChecker()
s="rate implies depreciation. Th e straight lines show eff ective linear time trends in the nominal (dashed "
splitted_s = s.split(' ')
splitted_s = list(filter(None, splitted_s)) #remove empty element in between two consecutive space
И затем проверить, существует ли слово, но previous_word + слово делает:
valid_s = [splitted_s[0]]
for i in range(1,len(splitted_s)):
word = splitted_s[i]
previous_word = splitted_s[i-1]
valid_s.append(word)
if spell.unknown([word]) and len(word)>0:
if not spell.unknown([(previous_word+word).lower()]):
valid_s.pop()
valid_s.pop()
valid_s.append(previous_word+word)
print(' '.join(valid_s))
>>>rate implies depreciation. Th e straight lines show effective linear time trends in the nominal (dashed
Но здесь, поскольку в словаре e существует как слово, оно не объединяет th и e
Таким образом, вы также можете сравнить частоту слов и объединить предыдущие_слово и слово, если предыдущий_слово + слово (намного) чаще встречается в словаре, чем слово:
valid_s = [splitted_s[0]]
for i in range(1,len(splitted_s)):
word = splitted_s[i]
previous_word = splitted_s[i-1]
valid_s.append(splitted_s[i])
if spell.word_probability(word.lower())<spell.word_probability((previous_word+word).lower()):
valid_s.pop()
valid_s.pop()
valid_s.append(previous_word+word)
print(' '.join(valid_s))
>>>rate implies depreciation. The straight lines show effective linear time trends in the nominal (dashed