Как определить имена людей в тексте (Java)
У меня есть некоторый входной текст, который содержит одно или несколько имен людей. У меня нет словаря для этих имен. Какая библиотека Java может помочь мне определить имена из моего входного текста? Я просмотрел OpenNLP, но не нашел ни примера, ни руководства, ни хотя бы описания того, как его можно применить в моем коде. (Я видел Javadoc, но это довольно плохая документация для такого проекта.)
Я хочу найти имена из некоторого случайного текста. Если введенный текст "Мой друг Джо Смит пошел в магазин", то я хочу получить "Джо Смит". Я думаю, что должно быть несколько достаточно больших словарей на интеллектуальных движках, основанных на меньших словарях, которые могут понимать человеческие имена.
10 ответов
Я бы посмотрел в LingPipe. Проверьте это демо. Кстати, то, что вы пытаетесь сделать, называется " распознавание именованных сущностей". Это сложная проблема CS, чтобы получить право.
OpenNLP имеет признание Named Entity. Ознакомьтесь с разделом " Нахождение английского имени" в документации. Но мой опыт подсказывает, что он идентифицирует сущности, но с ним не связано никаких тегов. (Если быть точным, я обнаружил, что теги присвоены неоднозначно.) Итак, если у вас есть предложение "Мой друг Джо Смит пошел в магазин Walmart", OpenNLP идентифицирует две названные сущности - "Джо Смит" и "Walmart". Я не мог получить тег "Джо Смит" как Персона и "Уолмарт" как Организацию.
По предложению Мэтта, вы можете попробовать LingPipe, хотя это коммерческий инструмент. Некоторые из альтернатив с открытым исходным кодом - MorphAdorner и Stanford NER.
Пока мы ждем подробностей о том, что вы делаете, вот пара ссылок на списки общих имен, по крайней мере, в демографических данных США:
Я думаю, что вам нужно (и / или больше) проверить их, поскольку ваша задача не похожа на то, что НЛП может сделать для вас без справочной информации.
Я бы посоветовал вам использовать Stanford Name Entity Recognizer (NER). Stanford NER предоставляет множество классификаторов. Один из классификаторов, предоставленных Stanford NER, может идентифицировать имя, местоположение и организацию по заданному тексту.
Вы можете найти онлайн демо для NER Стэнфорда по этой ссылке http://nlp.stanford.edu:8080/ner/
Вы можете проверить извлечение человека из свободного текста здесь http://code.google.com/p/graph-expression/wiki/Examples
OpenNlp имеет тип человека в своей модели NER. загрузите проект и модели с веб-сайта opennlp и получите модели с веб-сайта моделей (на странице Opennlp есть ссылка). Тогда иди сюда, http://www.asksunny.com/drupal/?q=node/4 это хороший пример того, как загрузить модели и выполнить NER. NER никогда не бывает идеальным, поэтому не разочаровывайтесь.
Попробуйте Stanford NER, библиотеку для обработки текста
Вы также можете просмотреть проекты OpenCyc и WordNet как более интересные с семантической точки зрения.
Эта проблема решается в распознавании именованных сущностей при обработке естественного языка, и в настоящее время считается немного сложной проблемой. Однако есть много инструментов, которые вы можете использовать для этого. Я использовал Стэнфордский NER для этого, и это хорошее программное обеспечение.
Сервис OpenCalais может быть полезен. Попробуйте их инструмент представления по адресу: http://www.opencalais.com/documentation/calais-submission-tool
Этот инструмент распознает гораздо больше, чем просто имена людей.