Lingua :: EN :: FindNumber numify добавление найденных английских чисел - PullRequest
1 голос
/ 04 октября 2011

Я искал способ преобразования английских чисел в целые числа и нашел здесь отличный пост: Масштабируемое регулярное выражение для английских цифр , использующее perl. Моя проблема с использованием numify связана с методом «сложения» чисел, а не просто их вывода. Например:

#!/usr/bin/perl
use strict;
use warnings;
use Lingua::EN::FindNumber;
print numify("some text and stuff house bill forty three twenty");

производит 63 , а не то, что я ожидал было 43 20

Я в растерянности, будучи новичком в Perl, как обойти это. Есть ли переопределения, которые я могу как-то сказать методам, чтобы не делать сложения? Мое единственное предположение в том, что это просто конкатенация строки и ее и целое число, поэтому он добавляет их ?? даже зная, что до сих пор к сожалению не помогает Спасибо всем, кто в курсе.

Ответы [ 2 ]

1 голос
/ 04 октября 2011

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

Если numify просто проверяет слова, которые представляют числа в последовательности, и добавляет их, то вы не сможете это преодолеть. Вы можете попытаться реализовать свою собственную грамматику, но я не думаю, что это совершенно тривиально.

Вам нужно будет поймать первое слово, представляющее число, а затем проверить следующие слова и попытаться найти соответствие вашему правилу. Например, после «сорока» у вас может быть число от 1 до 9 (один, два и т. Д.), Или «тысяча», или ... «миллионы» ... Я думаю, вы поняли, В этом случае вы получите «три», так что ... сложите их, следующим словом будет двадцать, что не соответствует ни одному из вышеприведенных правил, поэтому начните сначала как новое число.

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

Надеюсь, это поможет!

0 голосов
/ 04 октября 2011

Я думаю, что синтаксический анализатор в Lingua :: EN :: FindNumber не совсем понятен в отношении того, что он считает числом, так что, например, «три и двадцать», «три двадцать» или даже «сорок три двадцать» в качестве действительных чисел. В этом отношении, глядя на источник , он также, кажется, принимает "дюжину пекарей", "одиннадцать один" и " бильярд " в качестве чисел ...

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