Я пытаюсь разобрать текст, чтобы найти все ссылки на определенный элемент. Так, например, если мой элемент был 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, который уже выполнит некоторые из моих действий? Должен ли я каким-то образом обучать модель?
Я должен указать здесь, что «это не может быть сделано легко» будет приниматься как действительный ответ, если это то, что ответ. :) –