2017-02-13 3 views
0

Я пытаюсь разобрать текст, чтобы найти все ссылки на определенный элемент. Так, например, если мой элемент был The Bridge on the River Kwai, и я передал ему этот текст, мне бы хотелось найти все экземпляры, выделенные жирным шрифтом.Найти все ссылки на поставляемое существительное в StanfordNLP

Мост через реку Квай является 1957 англо-американский эпический военный фильм режиссера Дэвида Лина и в главной роли Уильям Холден, Джек Хоукинс, Алек Гиннесс и Хаякава, Сэссю. Фильм - произведение художественной литературы, но заимствует строительство железной дороги Бирмы в 1942-1943 годах за историческую обстановку . Фильм был снят на Цейлоне (ныне Шри-Ланка). Мост в фильме был около Китгулгалы.

До сих пор моя попытка состояла в том, чтобы пройти все упоминания, прикрепленные к каждому CorefChain, и пройти через те, которые охотятся за моей целевой строкой. Если я нахожу целевую строку, я добавляю весь CorefChain, так как я думаю, что это означает, что другие элементы в этом CorefChain также относятся к одной и той же вещи.

List<CorefChain> gotRefs = new ArrayList<CorefChain>(); 
String pQuery = "The Bridge on the River Kwai"; 

for (CorefChain cc : document.get(CorefCoreAnnotations.CorefChainAnnotation.class).values()) { 
    List<CorefChain.CorefMention> corefMentions = cc.getMentionsInTextualOrder(); 
    boolean addedChain = false; 
    for (CorefChain.CorefMention cm : corefMentions) { 
     if ((!addedChain) && 
       (pQuery.equals(cm.mentionSpan))) { 
      gotRefs.add(cc); 
      addedChain = true; 
     } 
    } 
} 

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

for (CorefChain gr : gotRefs) { 
    List<CorefChain.CorefMention> corefMentionsUsing = gr.getMentionsInTextualOrder(); 
    for (CorefChain.CorefMention cm : corefMentionsUsing) { 
     //System.out.println("Got reference to " + cm.mentionSpan + " in sentence #" + cm.sentNum); 
    } 
} 

Он находит некоторые из моих ссылок, но не так много, и он создает много ложных срабатываний. Как может быть, совершенно очевидно, что я читаю это, я действительно не знаю, что в первую очередь касается НЛП. Неужели я об этом совсем не так? Есть ли анализатор StanfordNLP, который уже выполнит некоторые из моих действий? Должен ли я каким-то образом обучать модель?

+0

Я должен указать здесь, что «это не может быть сделано легко» будет приниматься как действительный ответ, если это то, что ответ. :) –

ответ

1

Я думаю, что проблема с вашим примером является то, что вы ищете ссылки на название фильма, и не поддерживаю в Стэнфордский CoreNLP для распознавания названий фильмов, названия книг и т.д ...

Если вы посмотрите на этот пример:

«Джо купил ноутбук, он доволен им».

Вы заметите, что она соединяет:

"Джо" -> "Он"

и

"ноутбук" -> "это"

кореферентности является активное исследование и даже самая лучшая система может действительно ожидать, что F1 будет составлять около 60.0 по общему тексту, что означает, что она часто приводит к ошибкам.

+0

Большое спасибо! Есть ли способ, которым я могу научить его распознавать этот титул? Я не возражаю, если он признает это как личность или что-то в этом роде. –