如何在Java中提取所有类型的名词?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Java中提取所有类型的名词?相关的知识,希望对你有一定的参考价值。
我希望从文本中获取所有类型的名词我该如何获得?
import edu.stanford.nlp.tagger.maxent.MaxentTagger;
import java.io.BufferedReader;
import java.io.FileReader;
public class Noun_Code {
public static void main(String[] args) {
try{
FileReader file = new FileReader("C:\Users\NaB33L NaQ33B!\Desktop\TaggerDemo.java");
@SuppressWarnings("resource")
BufferedReader reader = new BufferedReader(file);
String text = "";
String line = reader.readLine();
while(line!=null){
text +=line;
line = reader.readLine();
}
System.out.println(text);
String tagged;
MaxentTagger LibAddress = new MaxentTagger("F:\stanford-postagger-2015-04-20\stanford-postagger-2015-04-20\models/english-left3words-distsim.tagger");
tagged = LibAddress.tagString(text);
System.out.println("Frequency : "+tagged);
String[] words = tagged.split(" ");
String[] keyword1 = new String[words.length];
int len=keyword1.length;
for(int i = 0;i<words.length;i++)
{
int length= words[i].length();
char chr1 = (char) (words[i].charAt(length-3));
char chr2 = (char) (words[i].charAt(length-2));
char chr3 = (char) (words[i].charAt(length-1));
if(chr1=='N' && chr2=='N' && chr3=='P')
{
keyword1[i] = words[i];
System.out.println(keyword1[i]);
}
else
{
keyword1[i] = "-1";
}
}
int var =0;
for(int i = 0;i<keyword1.length;i++)
{
if(keyword1[i].equalsIgnoreCase("-1"))
{
var=var+1;
}
}
len=len-var;
String[] original = new String[len];
String[] temp = new String[len];
int e=0;
for(int i = 0;i<keyword1.length;i++)
{
if(keyword1[i].equalsIgnoreCase("-1")){}
else
{original[e] = keyword1[i];
temp[e] = keyword1[i];
e=e+1;
}
}
}
catch(Exception ex){System.out.println("Exception :"+ex);}
}
}
请指导我,获取所有类型的名词。以上是我正在使用的所有代码。我想要以下所有名词类型:普通名词普通名词是指一般人或事物的名词,例如:男孩,国家,桥,城市,出生,一天,幸福。
专有名词专有名词是识别特定人,地点或事物的名称,例如史蒂文,非洲,伦敦,星期一。在书面英语中,专有名词以大写字母开头。
具体名词具体名词是一个名词,指的是人和物理上存在的东西,可以被看到,触摸,闻到,听到或品尝过。例子包括狗,建筑,咖啡,树,雨,海滩,曲调。
抽象名词抽象名词是一种名词,指的是思想,品质和条件 - 无法看到或触摸的东西,以及没有物理现实的东西,例如:真相,危险,幸福,时间,友谊,幽默。
集体名词集体名词是指人或事物的群体,例如观众,家庭,政府,团队,陪审团。在美式英语中,大多数集体名词都被视为单数,带有单数动词:整个家庭都在桌旁。
我相信你需要一本字典上所有现有名词的清单。然后,您只需在字符串上搜索每个字符串。
您可以使用以下链接中的列表。它包含4554个名词。
http://www.desiquintans.com/nounlist
通过观察当前代码,看起来好像只搜索标签以字符'NNP'开头的标记 - 这些只是专有名词。如果您还想包含常用名词,则应包含标记以“NN”开头的任何标记。这将包括具体名词,抽象名词,集体名词等。
你可以在这里找到完整的标签:https://www.ling.upenn.edu/courses/Fall_2003/ling001/penn_treebank_pos.html
以上是关于如何在Java中提取所有类型的名词?的主要内容,如果未能解决你的问题,请参考以下文章