Исправление неверного разделителя в строке - PullRequest
0 голосов
/ 05 марта 2020

Учитывая неправильную строку:

s="rate implies depreciation. Th  e straight lines show eff ective linear time trends in the nominal (dashed "

Я хочу вывести правильную строку, например:

s="rate implies depreciation. The straight lines show effective linear time trends in the nominal (dashed"

Если я пытаюсь удалить все разделители, используя:

re.sub("\\s*","",s)

это даст мне: "Скорость подразумевает амортизацию. Самая высокая эффективность - эффективная линейная метрика и синоним" (пунктирная), что не то, что я хочу

1 Ответ

1 голос
/ 05 марта 2020

Вы можете попробовать проверить орфографию слова, например, с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...