2009-12-09 3 views
5

У меня есть текст ввода, содержащий одно или несколько человеческих имен. У меня нет словарей для этих имен. Какая библиотека Java может помочь мне определить имена из моего входного текста? Я просмотрел OpenNLP, но не нашел ни одного примера или руководства или хотя бы описания того, как он может быть применен в моем коде. (Я видел javadoc, но это довольно плохая документация для такого проекта.)Как определить имена людей в тексте (Java)

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

+0

Вы пытаетесь определить, например, имя, которое появляется в предложении? то есть, учитывая, что «Мой друг Джо пошел в магазин». вы хотите «Джо»? – Seth

+2

Пожалуйста, уточните свой вопрос! Вы не можете «определять» имена, они были созданы исторически. Например, «Юлий» - это римское имя. Как выглядит текст и какую обработку вы должны с ним делать? –

+3

Я думаю, что автор хочет извлечь имена людей из неструктурированного текста с помощью библиотеки Java, возможно, используя OpenNLP, но он не может найти пример или хорошую документацию о том, как этого добиться. – DrDee

ответ

3

Я бы заглянул в LingPipe. Выезд this demo. Кстати, то, что вы пытаетесь сделать, называется «named entity recognition». Это сложная проблема с CS, чтобы справиться.

2

Пока мы ждем подробностей о том, что вы делаете, вот несколько ссылок на списки общих имен, по крайней мере, в США демографических:

Думаю, вам понадобятся эти (и/или более), чтобы проверить, поскольку ваша задача не похожа на что-то, что НЛП может сделать для вас без справочной информации.

0

Вы также можете просмотреть OpenCyc и WordNet проекты как более интересные из семантической точки зрения.

3

OpenNLP имеет Именованное распознавание сущности. Проверьте раздел English Name Finding в документах. Но мой опыт подсказывает, что он идентифицирует объекты, но с ним не связаны теги. (Если быть точным, я обнаружил, что теги неоднозначно назначены.) Итак, если у вас есть предложение «Мой друг Джо Смит отправился в магазин Walmart», OpenNLP идентифицирует два названных объекта - «Джо Смит» и «Walmart». Я не мог получить его как «Джо Смит» как Человек и «Walmart» как Организация.

Как предложил Мэтт, вы можете попробовать LingPipe, хотя это коммерческий инструмент. Некоторые альтернативы с открытым исходным кодом - MorphAdorner и Stanford NER.

1

OpenNLP имеет тип человека в их ЯЭР модели. загрузите проект и модели с сайта opennlp и получите модели с веб-сайта моделей (есть ссылка на странице Opennlp). Затем перейдите сюда, http://www.asksunny.com/drupal/?q=node/4, это хороший пример того, как загрузить модели и выполнить NER. NER никогда не бывает совершенным, поэтому не разочаровывайтесь.

1

Эта проблема решается при распознавании имени объекта в обработке на естественном языке, и в настоящий момент это считается немного сложной проблемой. Однако есть много инструментов, которые вы можете использовать для этого. Я использовал stanford NER для этого, и это хорошее программное обеспечение.

1

Я предлагаю вам использовать stanford Name Entity Recognizer (NER). Stanford NER предоставляет множество классификаторов. Один из классификаторов, предоставляемый stanford NER, может идентифицировать имя, местоположение и организацию из заданного текста.

Вы можете найти онлайн демо-версию для Стэнфорде НЭК в этой ссылке http://nlp.stanford.edu:8080/ner/