Подтвердить что ты не робот

Извлечение существительных из текста (Java)

Кто-нибудь знает самый простой способ извлечь только существительные из текста?

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

Любые предложения?

Спасибо Phil

EDIT:

 import org.annolab.tt4j.*; 
TreeTaggerWrapper tt = new TreeTaggerWrapper(); 

try { tt.setModel("/Nouns/english.par"); 

tt.setHandler(new TokenHandler() { 
     void token(String token, String pos, String lemma) {    
     System.out.println(token+"\t"+pos+"\t"+lemma); } }); 
     tt.process(words); // words = list of words 

     } finally { tt.destroy(); 
} 

Это мой код, английский - это язык. Я получаю сообщение об ошибке: Тип new TokenHandler() {} должен реализовать унаследованный абстрактный метод TokenHandler.token. Я что-то делаю неправильно?

4b9b3361

Ответ 1

Сначала вам нужно будет сделать токенизацию текста. Это может показаться тривиальным (разделение на любые пробелы может сработать для вас), но формально это сложнее. Тогда вы должны решить, что такое существительное. В "автостоянке" содержится одно существительное (автостоянка), два существительных (автомобиль, парк) или одно существительное (парк) и одно прилагательное (автомобиль)? Это трудная проблема, но опять же вы можете обойтись без нее.

"Я видел, что xyzzy" идентифицирует существительное не в словаре? Слово "the" вероятно идентифицирует xyzzy как существительное.

Где существительные "время летит как стрела". Сравните с "фруктовыми мухами, как банан" (спасибо Гручо Марксу).

Мы используем тег Brown (Java) (http://en.wikipedia.org/wiki/Brown_Corpus) в инструментах OpenNLP (opennlp.tools.lang.english.PosTagger; opennlp.tools.postag.POSDictionary на http://opennlp.sourceforge.net/), чтобы найти существительные на обычном английском языке, и я бы рекомендовал начать с этого - он делает большую часть ваше мышление для вас. В противном случае посмотрите на любой из POSTaggers (http://en.wikipedia.org/wiki/POS_tagger) или (http://www-nlp.stanford.edu/links/statnlp.html#Taggers).

В тегах с частичной речью с помощью компьютера, типично отличать от 50 до 150 отдельных частей речи для Например, английский, NN для единственного числа общие существительные, NNS для множественного общего существительные, NP для исключительных собственных существительных (см. теги POS, используемые в Brown Корпус)

Существует очень полный список наборов инструментов NLP в http://en.wikipedia.org/wiki/Natural_language_processing_toolkits. Я настоятельно рекомендую вам использовать один из них, а не пытаться сопоставить с Wordnet или другими коллекциями.

Ответ 2

Проверьте LingPipe. Это может якобы выделить названные объекты из текста на английском языке. Но я должен признаться, что NLP не является моей областью знаний.

Ответ 3

На основе вашего редактирования:

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

Ответ 4

мой следующий код работает с TreeTagger:

public List<String> tag(String str) {
    final List<String> tagLemme = new ArrayList<String>();
    String[] tokens =tokenizer.tokenize(str);
      System.setProperty("treetagger.home", "parametresTreeTagger/TreeTagger");
    TreeTaggerWrapper tt = new TreeTaggerWrapper<String>();
    try {
        tt.setModel("parametresTreeTagger/english/english.par");
        tt.setHandler(new TokenHandler<String>(){
                public void token(String token, String pos, String lemma) {
                        tagLemme.add(token + "_" + pos + "_" + lemma);
                        //System.out.println(token + "_" + pos + "_" + lemma);
                }
        });
        tt.process(asList(tokens));
     } catch (IOException e) {
        e.printStackTrace();
      } catch (TreeTaggerException e) {
        e.printStackTrace();
    }
finally {
        tt.destroy();
}
    return tagLemme;
}

Ответ 5

Посмотрите на WordNet базу данных. Эта лексическая база данных. Вы можете попробовать сопоставить каждое слово с ним и проверить, является ли оно существительным.

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

Ответ 6

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

Ответ 7

Найдите веб-сайт словаря с API (например, WS, RESTful), который вы можете использовать для запуска поисковых запросов.

Результаты должны быть в удобном для использования формате (например, XML, JSON) и, конечно, должны включать слово лексическая категория.