2011-03-03 3 views
3

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

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

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

+1

Возможно, статья wiki (http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits) поможет вам или, возможно, Google Google (http://www.google.com/search?sourceid=chrome&ie=UTF-8&q = Java + естественный язык + + синтаксический анализ). Набор Stanford NLP выглядит достаточно хорошо документированным и является GPL'd. – Tim

+0

Спасибо Тим. Я посмотрел на Стэнфордский НЛП. Но я думал, что это будет слишком сложно для моего проекта. Можете ли вы предложить более простые альтернативы? –

ответ

3

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

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

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

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

+0

Спасибо Мелву. Это дало мне представление о том, как его реализовать. Это именно то, что я искал. Можете ли вы предложить любые пакеты с открытым исходным кодом? –

Смежные вопросы