2017-02-07 12 views
0

У меня есть два файла, которые я должен перебрать и вычислить точность и вызвать для моего тегатора имен. один файл - золотой набор, а другой - выход моей системы. Я просто хочу понять, как мне перебирать предложения в двух файлах и подсчитывать количество полных и частичных совпадений. Я только хочу рассчитать совпадения для организации, лица и местоположения. Псевдокод или просто идея заставить меня начать работать очень хорошо.Итерация над двумя файлами, содержащими именованные сущности, карты и вычисление точности и отзыва

Файл 1: Gold Set

Sentence 1: 
{ORGANIZATION=[Fulton County Grand Jury]} 
Sentence 2: 
{ORGANIZATION=[City Executive Committee]} 
{LOCATION=[City of Atlanta]} 
Sentence 3: 
{LOCATION=[Fulton]} 
{PERSON=[Superior Court Judge Durwood Pye]} 
{PERSON=[Mayor-nominate Ivan Allen Jr.]} 
Sentence 4: 
Sentence 5: 
Sentence 6: 
{LOCATION=[Fulton]} 
Sentence 7: 
{LOCATION=[Fulton County]} 
Sentence 8: 
Sentence 9: 
{ORGANIZATION=[City Purchasing Department]} 
Sentence 10: 
Sentence 11: 
Sentence 12: 
{ORGANIZATION=[State Welfare Department]} 
Sentence 13: 
{LOCATION=[Fulton County]} 
{ORGANIZATION=[State Welfare Department]} 
{LOCATION=[Fulton County]} 

Файл 2: Мой выход

Sentence 1: 
{ORGANIZATION=[Fulton County Grand Jury], DATE=[Friday], LOCATION=[Atlanta]} 
Sentence 2: 
{ORGANIZATION=[City Executive Committee], LOCATION=[Atlanta]} 
Sentence 3: 
{ORGANIZATION=[Fulton Superior Court Judge Durwood Pye], DATE=[September October], PERSON=[Ivan Allen Jr.]} 
Sentence 4: 
Sentence 5: 
{LOCATION=[Georgia]} 
Sentence 6: 
Sentence 7: 
{LOCATION=[Atlanta, Fulton County]} 
Sentence 8: 
Sentence 9: 
{ORGANIZATION=[City Purchasing Department]} 
Sentence 10: 
{LOCATION=[Georgia]} 
Sentence 11: 
Sentence 12: 
{ORGANIZATION=[State Welfare Department]} 
Sentence 13: 
{ORGANIZATION=[State Welfare Department], LOCATION=[Fulton County, Fulton County]} 

ответ

0

Вы можете приступить к работе, как показано ниже, чтобы разобрать файл и собрать данные, которые необходимы. Ниже будут представлены все организации.

Scanner scanner = new Scanner(new File("path-to-file")); 
    List<String> orgLines = new ArrayList<String>(); 
    while(scanner.hasNextLine()){ 
     String line = scanner.nextLine(); 
     if(line.startsWith("{ORGANIZATION")){ 
      orgLines.add(line); 
     } 
    } 

После того, как у вас есть результат обоих файлов, вы можете использовать retainAll найти полный матч.

orgLines.retainAll(orgLines2); 

Для частичного совпадения вам необходимо пройти через все записи и вычислить на основе вашей логики соответствия.

+0

Я бы не перебрать значения карты для извлечения значений организации? См. Второй файл. Моя строка может не всегда начинаться с ключа организации. – serendipity

+0

Текущее точное совпадение будет просто соответствовать организациям, которые имеют одинаковые поля, связанные с одними и теми же значениями - по существу, строки, которые точно совпадают, - например, '{ORGANIZATION = [State Welfare Department]} '- но если вы предпочитаете совпадать только с именем, игнорирующим DATE и т. д., тогда необходимо создать пользовательскую логику. –

0

Если вы используете Stanford NER, почему бы не использовать встроенную команду для тестирования вашего классификатора?

java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier path/to/ner-model.ser.gz -testFile gold-annotated-text.tsv 

Вы должны изменить свое золото установить формат this.

Ссылка: http://nlp.stanford.edu/software/crf-faq.html#a