Python извлекает измеримый текст - PullRequest
0 голосов
/ 03 мая 2018

Здравствуйте. Я хочу использовать python и извлечь текст, представляющий собой либо числовое значение, либо прописанное число, плюс первое слово до и после найденного значения.

Пример текста:

У меня есть 2 брата, и они купили по одной машине каждый. Мой самый старый брат вложил 1000 долларов.

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

'have 2 brothers', 'bought one car', 'invested 1,000 dollars'

Я пробовал это>

>>> import re
>>> str = "I have 2 brothers and they bought one car each. My oldest brother invested 1,000 dollars."
>>> print re.findall("\d+", s)
['2']

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

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Предполагая, что текстовая форма чисел идет только от одного до десяти.

import re

text = 'I have 2 brothers and they bought one car each. My oldest brother invested 1,000 dollars.'
text_numbers = []
numbers = re.findall(r'[0-9,\-]+|one|two|three|four|five|six|seven|eight|nine|ten', text)
for number in numbers:
    parts = text.split(number)
    first_part = parts[0].strip().split(' ')[-1]
    second_part = parts[1].strip().split(' ')[0]
    print('{} {} {}'.format(first_part, number, second_part))
0 голосов
/ 03 мая 2018

Это быстрое и грязное регулярное выражение:

pat = re.compile(r'(\w+\s+)([\d,]+|one|two|three|four|five|six|seven|eight|nine)(\s+\w+)')

дает желаемый результат. Конечно, он находит только однозначные числа, написанные на английском языке. Для произвольных чисел вам нужно будет использовать правильный парсер. Но этого может быть достаточно для того, что вы хотите сделать.

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