Как использовать NLTK для извлечения чисел из текстовой строки в Python - PullRequest
0 голосов
/ 19 июня 2020

В последнее время я работал над программой, и я хотел добавить функциональность, которая бы использовала речь пользователя, например «Покажи мне мое расписание на следующие пять (или 5) дней» или что-то в этом роде, а затем извлекла число "Пять или 5" в качестве числа и использовать его в другой части кода для запроса данных из календаря Google, часть Google в основном выполняется, но как мне получить его для извлечения чисел, таких как "Пять" или числа на основе букв, я нашел этот код раньше, когда смотрел вокруг, и он возвращает только истину или ложь, и я не уверен, как заставить его возвращать фактическое число, ваша помощь будет очень признательна!

import nltk

text = "Is there a one two three in there?"

def existence_of_numeric_data(text):
    text=nltk.word_tokenize(text)
    pos = nltk.pos_tag(text)
    count = 0
    for i in range(len(pos)):
        word , pos_tag = pos[i]
        if pos_tag == 'CD':
            return True
    return False

print(existence_of_numeric_data(text))

есть ли способ сделать этот выпуск чисел в целочисленном формате? например,

Строка говорит: «Показать мое расписание на следующие пять дней», она вернет число «5» как отдельный int

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Я нашел плагин под названием word2number (Установить с помощью pip), и он отлично справляется со своей задачей, вот как вы его используете

from word2number import w2n

text = "There are five days in a week"

print(w2n.word2number(text))

output>>
5
0 голосов
/ 19 июня 2020

Если ваш текст похож на «Содержит 1 2 3», вы можете просто сделать следующее:

for word in text.split():
    if word.isdigit():
        num = int(word)

Он должен работать. Но для текста типа «Содержит один, два, три» вы можете создать словарь, содержащий такие слова, как:

dt = ["one": 1, "two": 2, "three": 3, "four": 4, "five": 5]

, а затем просто искать каждое слово в этом списке в данном тексте:

for words in dt:
    for w in text.split():
        if w == words:
            num == dt[words]

Но это можно использовать, только если у вас ограниченное количество слов. Например, если текст содержит двадцать, а в вашем словаре нет двадцати, это не сработает.

...