Как вернуть исходную позицию слова в предварительно обработанном предложении, используя python? - PullRequest
2 голосов
/ 16 февраля 2020

Я пытаюсь получить предложение от пользователя и предварительно обработать его, чтобы удалить специальные символы, используя регулярное выражение в бэкэнде, а затем мне нужно отправить обратно положение конкретного слова, чтобы выделить это слово для пользователя, но столкнуться с конфликтом как позиция оригинала и предварительно обработанное предложение различаются.

Есть ли лучший способ решить вышеуказанную проблему, используя Python?

Например:

import re

def text_preprocessing(input_text, string_to_find):

    print("Original text is:", input_data)
    cleaned_text = [re.sub('[^a-zA-Z0-9#.+]', " ", input_data)]
    cleaned_text = [re.sub(' +', " ", text) for text in cleaned_text]
    for cleaned_text in cleaned_text:  # just to convert list to string
        print("preprocessed text is:", cleaned_text)
        position = cleaned_text.find(string_to_find)
        position = [position, position + len(string_to_find)]
        return position

input_text = 'Hi! Hello'
string_to_find = 'Hello'
position = text_preprocessing(input_text, string_to_find)
print(position)

Фактический результат

Original text is: Hi! Hello
preprocessed text is: Hi Hello
[3, 8]

оригинальное предложение = «Привет! Привет '

Предварительно обработанное предложение =' Привет Привет ' (только что удаленный символ'! ')

В случае, если мне нужно выделить слово "Привет", я просто возвращаю позиция от бэкэнда как (3,8) , но фактическая позиция в пользовательском интерфейсе равна (4, 9)

Ожидаемый результат

Original text is: Hi! Hello
preprocessed text is: Hi Hello
[4, 9]

ОС: windows 10, Python 3.7, используется регулярное выражение для предварительной обработки

1 Ответ

0 голосов
/ 16 февраля 2020

Первый символ в строке находится в позиции 0, затем Hello находится в позиции 3 в строке Hi Hello.

  • H находится в 0
  • i в 1
  • в 2
  • H в 3
  • e в 4
  • и т. Д. ...
...