在Java中存储提取的POS标记文本所需的数据结构
朋友们,我正在使用AANV(形容词-副词-名词-动词)方法进行情绪分析,这是我最后一年的项目。在这个项目中,我已经完成了词性标注,我正在使用斯坦福词性标注器,因为它给了我适当的结果。 例如,假设以下句子的输出如下: 输入句子: 这架照相机运转良好 照相机很好 照相机捕捉照片的速度太慢了 词性标注输出句子: /DT摄像机/NN已/VBZ工作/VBN良好/RB./ 摄像头/NN是/VBZ非常/RB良好/JJ./ 摄像头/NN捕捉/VBZ照片/NN so/RB慢速/RB./ 如上所述,输出带有词性标记的句子,其中我将要求只提取形容词、副词、名词、动词及其词性类别。 为了获得AANV,我使用正则表达式并写下以下代码:在Java中存储提取的POS标记文本所需的数据结构,java,regex,sentiment-analysis,pos-tagger,Java,Regex,Sentiment Analysis,Pos Tagger,朋友们,我正在使用AANV(形容词-副词-名词-动词)方法进行情绪分析,这是我最后一年的项目。在这个项目中,我已经完成了词性标注,我正在使用斯坦福词性标注器,因为它给了我适当的结果。 例如,假设以下句子的输出如下: 输入句子: 这架照相机运转良好 照相机很好 照相机捕捉照片的速度太慢了 词性标注输出句子: /DT摄像机/NN已/VBZ工作/VBN良好/RB./ 摄像头/NN是/VBZ非常/RB良好/JJ./ 摄像头/NN捕捉/VBZ照片/NN so/RB慢速/RB./ 如上所述,输出带有词性标记
private void btnShowTagActionPerformed(java.awt.event.ActionEvent evt) {
Pattern NounPat=Pattern.compile("[A-Za-z]+/NN");
Pattern AdvPat=Pattern.compile("[A-Za-z]+/RB");
Pattern AdjPat=Pattern.compile("[A-Za-z]+/JJ");
Pattern VerbPat=Pattern.compile("[A-Za-z]+/VB.");
String StrToken;
Matcher mat;
StringTokenizer PosToken;
String TempStr;
int j;
for(int line=0;line<SAPosTagging.tagedReview.length;line++)
{
try{
PosToken=new StringTokenizer(SAPosTagging.tagedReview[line]);
while(PosToken.hasMoreTokens())
{
StrToken=PosToken.nextToken();
mat=NounPat.matcher(StrToken);
if(mat.matches())
{
TempStr=StrToken;
txtareaExTagText.append("Noun=>"+StrToken); //textarea to be appended
j=TempStr.indexOf("/");
TempStr=TempStr.substring(0,j);
System.out.print("\tNoun=>"+TempStr);
}
mat=VerbPat.matcher(StrToken);
if(mat.matches())
{
txtareaExTagText.append("\tVerb=>"+StrToken);
TempStr=StrToken;
j=TempStr.indexOf("/");
TempStr=TempStr.substring(0,j);
System.out.print("\tVerb=>"+TempStr);
}
mat=AdvPat.matcher(StrToken);
if(mat.matches())
{
txtareaExTagText.append("\tAdverb=>"+StrToken);
TempStr=StrToken;
j=TempStr.indexOf("/");
TempStr=TempStr.substring(0,j);
System.out.print("\tAdVerb=>"+TempStr);
}
mat=AdjPat.matcher(StrToken);
if(mat.matches())
{
txtareaExTagText.append("\tAdjective=>"+StrToken);
TempStr=StrToken;
j=TempStr.indexOf("/");
TempStr=TempStr.substring(0,j);
System.out.print("\tAdjective=>"+TempStr);
}
}
System.out.println();
txtareaExTagText.append("\n\n");
}catch(Exception e){}
}
}
private void btnShowTagActionPerformed(java.awt.event.ActionEvent evt){
Pattern NounPat=Pattern.compile(“[A-Za-z]+/NN”);
Pattern AdvPat=Pattern.compile(“[A-Za-z]+/RB”);
Pattern AdjPat=Pattern.compile(“[A-Za-z]+/JJ”);
Pattern VerbPat=Pattern.compile(“[A-Za-z]+/VB”);
弦斯特肯;
火柴垫;
StringTokenizer PosToken;
字符串TempStr;
int j;
for(int line=0;linecamera/NN动词=>is/VBZ动词=>worked/VBN副词=>well/RB
名词=>Camera/NN动词=>is/VBZ副词=>very/RB形容词=>good/JJ
名词=>Camera/NN动词=>captures/VBZNoun=>photo/NN副词=>so/RB副词=>slow/RB**
现在我想把这对组合成(posword,poscategory)例如(camera,n),这样这对组合将被传递给sentiwordnet,以便从sentiwordnet检索分数。请给我存储这对组合结构的代码,而不分解句子链接或结构,以便我将其传递给sentiwordnet。
在结对时,应保持句子结构。一个句子可能包含多个动词、名词、副词或形容词。我建议您忘记“数据结构”,并考虑OO类对其进行建模。想想一个句子类,你想存储一个句子的什么内容,以及如何存储句子。
如果你坚持使用“通用”数据结构,你可以使用一个列表,其中每个元素代表一个带有Guava多重映射类型的句子
键应该是名词/动词/Etc,值应该是单词。它允许每个键有几个值。
参考资料
番石榴示例(未测试):
List-sentenceList=new-ArrayList();
用于(字符串行:行){
Multimap aux=ArrayListMultimap.create();
PosToken=新的StringTokenizer(sapostaging.tagedReview[line]);
while(PosToken.hasMoreTokens()){
//待办事项。。。
strToken=PosToken.nextToken();
//TODO,假设它是一个名词
副词put(“名词”,strToken);
//待办事项等。
}
句子列表。添加(辅助);
}
OO示例(未测试):
公共类语句{
私有列表名词=新的ArrayList;
私有列表谓词=新的ArrayList;
//待办事项副词等。
公共列表getNons(){返回名词;};
//要做的其他事情,等等。
}
List sentenceList=新的ArrayList();
用于(字符串行:行){
句子aux=新句子();
PosToken=新的StringTokenizer(sapostaging.tagedReview[line]);
while(PosToken.hasMoreTokens()){
//待办事项。。。
strToken=PosToken.nextToken();
//TODO,假设它是一个名词
aux.getnomes().add(strToken);
//待办事项等。
}
句子列表。添加(辅助);
}
谢谢!!我正在上句子课,但我不能。你能告诉我句子课的结构吗???@ShamBhand,给你。
List<Multimap<String, String>> sentenceList = new ArrayList<>();
for (String line: lines) {
Multimap<String, String> aux = ArrayListMultimap.create();
PosToken=new StringTokenizer(SAPosTagging.tagedReview[line]);
while(PosToken.hasMoreTokens()) {
// TODO ...
strToken=PosToken.nextToken();
// TODO, lets assume it is a noun
aux.put("noun", strToken);
// TODO, etc.
}
sentenceList.add(aux);
}
public class Sentence {
private List<String> nouns = new ArrayList<>;
private List<String> verbs = new ArrayList<>;
// TODO Adverbs, etc.
public List<String> getNons() { return nouns; };
// TODO Other getters, etc.
}
List<Sentence> sentenceList = new ArrayList<>();
for (String line: lines) {
Sentence aux = new Sentence();
PosToken=new StringTokenizer(SAPosTagging.tagedReview[line]);
while(PosToken.hasMoreTokens()) {
// TODO ...
strToken=PosToken.nextToken();
// TODO, lets assume it is a noun
aux.getNouns().add(strToken);
// TODO, etc.
}
sentenceList.add(aux);
}