2017-02-07 5 views
0

필자는 반복 작업을 수행하고 이름이 지정된 엔티티 태그 지정자에 대해 정밀도와 회수율을 계산해야하는 두 개의 파일이 있습니다. 하나의 파일은 금색 집합이고 다른 하나는 내 시스템의 출력물입니다. 두 파일의 문장을 반복하고 전체 및 부분 일치 수를 계산하는 방법을 이해하고 싶습니다. 조직, 사람 및 위치에 대한 일치 항목 만 계산하려고합니다. 가짜 코드 또는 나를 시작시키는 아이디어만으로도 매우 잘 작동합니다.명명 된 엔티티 맵을 포함하는 두 파일을 반복하고 정밀도와 리콜 계산

파일 1 : 골드 세트

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

스탠포드 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