Обработка естественного языка для распознавания числовых данных - PullRequest
3 голосов
/ 03 марта 2011

Мое требование - распознавать и извлекать числовые данные из предложения на естественном языке (только на английском языке) в ответ на запросы. Платформа является Java. Например, если пользовательский запрос «Какова высота горы Эверест» и у нас есть абзац как:

В 1856 году в рамках Великой тригонометрической съемки Британской Индии была установлена ​​первая опубликованная высота Эвереста, тогда известная как Пик XV, в 29 002 фута (8 840 м). В 1865 году Эверест получил официальное английское название от Королевского географического общества по рекомендации Эндрю Во, генерального инспектора Великобритании в то время, который назвал его в честь своего предшественника на этом посту и бывшего вождя сэра Джорджа Эвереста. 4] Хомолунгма широко использовалась тибетцами на протяжении веков, но Во не смог предложить установленное местное название, потому что Непал и Тибет были закрыты для иностранцев. (Вставлено из википедии)

Для пользовательского запроса «Высота горы Эверест» из параграфа мне нужно получить 29002 фута или 8840 м в качестве ответа. Кто-нибудь может предложить какие-либо возможные способы сделать это на Java? Существуют ли библиотеки с открытым исходным кодом для того же?

1 Ответ

3 голосов
/ 03 марта 2011

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

Я бы разделил проблему на 2 части; парсинг блока вопроса и затем передача блока ответа. Из блока вопросов вам нужно знать 2 фрагмента информации, существительное того, что вы ищете, а также тип ответа. В этом случае существительное - Эверест, а тип - высота. «Типы» данных, которые вы можете создать словарь для довольно быстрого поиска вашей входной строки (например, «рост», «вес», «расстояние», «возраст»). Существительные являются более сложными, поэтому я бы сказал, что просто предположим, что каждый не тип в вопросе является потенциальным существительным, возможно, удаляя словарь известных не существительных (таких как "at", "the", "of" и др.).

После того, как вы определили существительное и введите из вопроса, вы можете начать сканирование блока ответа. Я бы начал с того, что разбил это на предложения. Затем отсканируйте каждое предложение для каждого из ваших существительных. Если он найден в этом предложении, вам необходимо снова отсканировать предложение на предмет чисел (принимая во внимание возможные пробелы или разделение запятыми). Наконец, вам нужно «обойти» любые числа, которые вы найдете для типа измерения. Таким образом, в данном случае ваш "тип", который мы проанализировали из вопроса, был "высота". Вам нужно будет создать отображение типов на измерения, поэтому «высота» будет отображать «км, футы, дюймы, см, м» и т. Д. Если число имеет один из этих типов вокруг него, то возвращает число и тип измерения как ответ.

Надеюсь, что вы начали. Как указано выше, это не является надежным коммерческим решением. Это домашнее задание.

...