2014-01-13 2 views
0

Я использую токенизатор NLP, однако я не уверен в поведении, когда дело касается мест. Если я дам Нью-Йорк или Мехико, токенизатор разделяет это на Нью и Йорк соответственно.Tokenizing place like New York

Однако я хочу, чтобы это был только Нью-Йорк. Есть ли какие-то токенизаторы для достижения этого, а если нет, как достичь этого результата?

Благодаря

ответ

0

Ваш токенизатор ведет себя правильно. New и York - два разных токена. Что вы хотите сделать, это то, что называется chunking. Here есть некоторая информация о chunking, чтобы дать вам некоторый фон.

В зависимости от того, какую библиотеку НЛП вы используете, возможно, есть некоторые функции, встроенные для chunking. Для OpenNLP, который вы включили в свои теги вопроса, см. Этот связанный вопрос: How to extract the noun phrases using Open nlp's chunking parser

+0

Если вы хотите автоматически открывать такие вещи, как «Нью-Йорк», без необходимости поддерживать словарь (таблицу поиска), то, возможно, вам стоит попробовать распознать имя и название. Компонент NER будет использовать модель для поиска местоположений (даже многословных) в ваших токенах на основе модели. – markg

0

Для сравнения один или два элемента вам необходимо рекурсивный набор какой-то.

Одиночные жетоны (Вашингтон, Майами).

Потенциальные первые префиксов жетоны, которые имеют что-то после них:

Новый (Haven, Йорк)

San (Франсишку).

По существу, вы сначала соглашаетесь на одиночные токены, а затем на префиксные маркеры и влияете на разбор второго токена.

Один из способов сделать это заключается в использовании hm = HashMap<String, HashSet<String>> как

hs = new HashSet() 
hs.add("Haven"); 
hs.add("York"); 

hm = new HashMap(); 
HashMap.put("New", hs); 

и когда вы получите матч в Keyset Hm, используйте соответствующее значение для соответствия следующей лексемы (но не забывайте, что это может быть false match !!)

+0

Привет @claj, Не могли бы вы объяснить, что означает набор рекурсивов? – Yogi

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