Используя Python, каков наилучший способ заменить 7x на 7 в текстовых строках? - PullRequest
0 голосов
/ 30 января 2019

Я относительно новичок в Python и очень плохо знаком с nltk и regex.Я искал руководство, но не понял его.Я просто пытаюсь удалить любые x или X, которые идут после целого числа (всегда должно быть целым числом) в тексте, чтобы в конечном итоге получить только число.У меня есть код, который делает то, что мне нужно, после удаления X или x, поэтому теперь я пытаюсь добавить в код, чтобы удалить этот x или X из чисел, но НЕ из обычного текста (слова, такие как exited и матрица ниже),

Например, если у меня есть текстовая строка: «Это был прекрасный день, и 710x птиц покинули свои места обитания и пролетели над головой.130X из них нырнули и приземлились на траву, в то время как 21X из них были застрелены 7 охотниками.9x птиц исчезли в матрице.Остальные 550x птиц продолжали лететь. '

Мне бы хотелось:

' Это был прекрасный день, и 710 птиц покинули свои места обитания и пролетели над головой.130 из них нырнули и приземлились на траву, в то время как 21 из них был застрелен 7 охотниками.9 птиц исчезли в матрице.Оставшиеся 550 птиц продолжали лететь. '

Так что я не знаю, лучше ли это обрабатывать с помощью регулярных выражений (Regular Expression) или nltk (Natural Language Toolkit) или просто каким-то оператором if как-то.Я копирую весь текст, который может содержать от 20 000 до 30 000 токенов / слов из pdf-файлов, из которых я извлекаю текст, но я был бы рад удалить эти x, пока они еще были огромной строкой или после того, как они были превращены в токены.Неважно для меня.Большое спасибо за любую помощь ...

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Это соответствует x с утверждением, что предыдущий символ является цифрой, и заменяет x ничем.

re.sub('(?<=\d)[xX]', '', s)
0 голосов
/ 30 января 2019
def parseNumeric(data):
  for each in data:
    noX =''
    for i in each:
      if i.isdigit():
        noX+=i
    if noX != '':
      data[data.index(each)]=noX
  return " ".join(str(x) for x in data)



theData = "It was a beautiful day and 710x birds exited their habitats and flew overhead. 130X of them dove down and landed on the grass while 21X of them were shot by 7 hunters. 9x birds vanished into the matrix. The remaining 550x birds kept flying away."

print("\n BEFORE \n")

print(theData)

print("\n AFTER \n")

print(parseNumeric(theData.split()))

Проверьте DEMO , я знаю, что это не лучшее решение, но надеюсь, что оно поможет.

0 голосов
/ 30 января 2019

Попробуйте это.

import re

text = 'It was a beautiful day and 710x birds exited their habitats and flew overhead. 130X of them dove down and landed on the grass while 21X of them were shot by 7 hunters. 9x birds vanished into the matrix. The remaining 550x birds kept flying away.'

re.sub(r'(\d+)[xX]', r'\1', text)

# >>> 'It was a beautiful day and 710 birds exited their habitats and flew overhead. 130 of them dove down and landed on the grass while 21 of them were shot by 7 hunters. 9 birds vanished into the matrix. The remaining 550 birds kept flying away.'

Что это?

re.sub - это подстановка регулярным выражением.Первый параметр - это регулярное выражение для поиска, а второй - регулярное выражение для замены.

r'(\d+)[xX]' состоит из

\d+ <= 1 or more integer sequence
[xX] <= 1 x or X
() <= keep it to use afterwards

r'\1' означает первые сохраненные строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...