2017-07-31 11 views
1

私は自然言語処理(NLP)で新しく、品詞タグ付け(POS)を行いたいのですが、テキスト。JAでStanford nlpを使用してPOSタグ付き文に基づく言語構造を抽出する

NN/NNS + IN + DT + NN/NNS/NNP/NNPS

public static void main(String args[]) throws Exception{ 
    //input File 
    String contentFilePath = ""; 
    //outputFile 
    String triplesFilePath = contentFilePath.substring(0, contentFilePath.length()-4)+"_postagg.txt"; 

    //document to POS tagging 
    String content = getFileContent(contentFilePath); 

    Properties props = new Properties(); 

    props.setProperty("annotators","tokenize, ssplit, pos"); 
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props); 
    // Annotate the document. 
    Annotation doc = new Annotation(content); 
    pipeline.annotate(doc); 


    // Annotate the document. 
    List<CoreMap> sentences = doc.get(CoreAnnotations.SentencesAnnotation.class); 
    for (CoreMap sentence : sentences) { 
     for (CoreLabel token: sentence.get(CoreAnnotations.TokensAnnotation.class)) { 
      String word = token.get(CoreAnnotations.TextAnnotation.class); 
      // this is the POS tag of the token 
      String pos = token.get(CoreAnnotations.PartOfSpeechAnnotation.class); 
      System.out.println(word + "/" + pos); 
     } }}} 
+0

私は、決定者のPOSタグが「DET」ではなく「DT」であることを知りました。私は私の答えを修正した、それは今働いている。 –

答えて

1

あなたは単にあなたの文章を反復し、POSタグを確認することができます:私は、私はこのような構造を抽出する方法がわからない、スタンフォード・NLPを使用しますが、POSタグ付けを管理することができ。要件に合っている場合は、この構造を抽出することができます。そのコードは次のようになります:

for (CoreMap sentence : doc.get(CoreAnnotations.SentencesAnnotation.class)) { 
    List<CoreLabel> tokens = sentence.get(TokensAnnotation.class); 
    for(int i = 0; i < tokens.size() - 3; i++) { 
     String pos = tokens.get(i).get(PartOfSpeechAnnotation.class); 
     if(pos.equals("NN") || pos.equals("NNS")) { 
      pos = tokens.get(i + 1).getString(PartOfSpeechAnnotation.class); 
      if(pos.equals("IN")) { 
       pos = tokens.get(i + 2).getString(PartOfSpeechAnnotation.class); 
       if(pos.equals("DT")) { 
        pos = tokens.get(i + 3).getString(PartOfSpeechAnnotation.class); 
        if(pos.contains("NN")) { 
         //We have a match starting at index i and ending at index i + 3 
         String word1 = tokens.get(i).getString(TextAnnotation.class); 
         String word2 = tokens.get(i + 1).getString(TextAnnotation.class); 
         String word3 = tokens.get(i + 2).getString(TextAnnotation.class); 
         String word4 = tokens.get(i + 3).getString(TextAnnotation.class); 
         System.out.println(word1 + " " + word2 + " " + word3 + " " + word4); 
        } 
       } 
      } 
     } 
    } 
} 
+0

なぜDETでは動作しませんか? – Raha1986

+0

スタンフォードのPOSタグは[Penn Treebank POS Tags](https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html)から取られています。これらは、決定子のタグを「DT」として指定します。 「DET」タグはありません。 –

関連する問題