2017-02-07 5 views
0

名前付きエンティティタグャーの精度とリコールを反復処理しなければならないファイルが2つあります。 1つのファイルは金のセットで、もう1つは私のシステムの出力です。私は、2つのファイルの文章をどのように反復処理し、完全一致と部分一致の数を数えるのかを理解したいだけです。私は組織、人、場所のマッチを計算したいだけです。擬似コード、または私を始めるためのアイデアは非常にうまくいくでしょう。名前付きエンティティマップを含む2つのファイルを繰り返し、精度とリコールを計算する

ファイル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

私は組織の値を抽出するために、マップ値を反復する必要はないでしょうか? 2番目のファイルを参照してください。私の行は、必ずしも組織のキーで始まるとは限りません。 – serendipity

+0

現在の完全一致は、同じ値に関連付けられた同じフィールドを持つ組織と一致します - 基本的に正確に一致する行 - '{ORGANIZATION = [State Welfare Department]} ' - しかしDATEなどを無視してnameとマッチさせたい場合は、カスタムロジックを構築する必要があります。 –

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

関連する問題