**我正在制作一个关于情绪分析的项目。所以我用stanford POS标签来标记句子。我想从句子中提取名词短语,但它只是标记名词。 我如何从中得到名词短语。我在java中编码。 我在网站上搜索,我发现这是为了制作一个名词短语: 对于名词短语,此模式或正则表达式如下:
(形容词|名词)*(名词介词)? (形容词|名词)*名词 即零个或多个形容词或名词,后跟一个名词和介词的选项组,再跟零个或多个形容词或名词,后跟一个名词。
我试图使用java的reguler表达式库对其进行编码。即正则表达式。但无法找到理想的结果。 有人有代码吗? **
答案 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
感谢您的帮助