使用stanford POS tagger在情绪分析中寻找名词短语

时间:2014-02-14 07:23:19

标签: regex sentiment-analysis pos-tagger

**我正在制作一个关于情绪分析的项目。所以我用stanford POS标签来标记句子。我想从句子中提取名词短语,但它只是标记名词。 我如何从中得到名词短语。我在java中编码。 我在网站上搜索,我发现这是为了制作一个名词短语: 对于名词短语,此模式或正则表达式如下:

(形容词|名词)*(名词介词)? (形容词|名词)*名词 即零个或多个形容词或名词,后跟一个名词和介词的选项组,再跟零个或多个形容词或名词,后跟一个名词。

我试图使用java的reguler表达式库对其进行编码。即正则表达式。但无法找到理想的结果。 有人有代码吗? **

2 个答案:

答案 0 :(得分:1)

我编码了这个。和解决方案是...... 它将从仅包含名词的句子中提取所有名词短语。 例如。像NP一样:白虎。它将提取"白虎"。

public static void maketree(String sent, int sno, Sentences sen) 
{
    try 
    {
        LexicalizedParser parser = LexicalizedParser.loadModel("stanford-parser-full-2014-01-04\\stanford-parser-3.3.1-models\\edu\\stanford\\nlp\\models\\lexparser\\englishPCFG.ser.gz");
        String sent2 = "Picture Quality of this camera is very good";
        String sent1[] = sent2.split(" ");
        List<CoreLabel> rawWords = Sentence.toCoreLabelList(sent1);
        Tree x = parser.apply(rawWords);
        x.indexLeaves();
        System.out.println(x);
        findNP(x,sen);
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

public static void findNP(Tree t, Sentences sent) 
{
    if (t.label().value().equals("NP")) 
    {
        noun(t,sent);
    } 
    else
    {
        for (Tree child : t.children()) 
        {                
            findNP(child,sent);
        }
    }

}

    public static void noun(Tree t,Sentences sent)
{       
    String noun="";
    for(Tree temp : t.children())
    {
        String val = temp.label().value();
        if(val.equals("NN") || val.equals("NNS") || val.equals("NNP") || val.equals("NNPS"))
        {
            Tree nn[] = temp.children();
            String ss = Sentence.listToString(nn[0].yield());
            if(noun=="")
            {
                noun = ss;
            }
            else
            {
                noun = noun+" "+ss;
            }
        }
        else
        {   
            if(noun!="")
            {
                sent.nouns[i++] = noun;
                noun = "";
            }
            noun(temp,sent);
        }
    }
    if(noun!="")
    {
        sent.nouns[i++] = noun;
    }
}

答案 1 :(得分:0)

请您查看链接并对此发表评论。如果你能帮我 “白老虎”会得到与上述代码相同的结果。可能代码不完整,这也就是我收到错误的原因。

例如:

sent.nouns [i ++] =名词; // sent.nouns ?????它似乎未定义。你能不能得到完整的代码,或者你可以通过以下链接进行交流。

这是链接

Extract Noun phrase using stanford NLP

感谢您的帮助