我需要使用NLP解决以下问题,您能否指点一下如何使用OpenNLP API实现这一目标
一个。如何判断某句话是否暗示过去,现在或将来的某种行为。
(e.g.) I was very sad last week - past
I feel like hitting my neighbor - present
I am planning to go to New York next week - future
湾如何找到与个人,公司或国家相对应的单词
(e.g.) John is planning to specialize in Electrical Engineering in UC Berkley and pursue a career with IBM).
Person = John
公司= IBM
位置=伯克利
由于
答案 0 :(得分:8)
我可以提供
的解决方案解决方案b。
这是代码:
public class tikaOpenIntro {
public String Tokens[];
public static void main(String[] args) throws IOException, SAXException,
TikaException {
tikaOpenIntro toi = new tikaOpenIntro();
String cnt;
cnt="John is planning to specialize in Electrical Engineering in UC Berkley and pursue a career with IBM.";
toi.tokenization(cnt);
String names = toi.namefind(toi.Tokens);
String org = toi.orgfind(toi.Tokens);
System.out.println("person name is : "+names);
System.out.println("organization name is: "+org);
}
public String namefind(String cnt[]) {
InputStream is;
TokenNameFinderModel tnf;
NameFinderME nf;
String sd = "";
try {
is = new FileInputStream(
"/home/rahul/opennlp/model/en-ner-person.bin");
tnf = new TokenNameFinderModel(is);
nf = new NameFinderME(tnf);
Span sp[] = nf.find(cnt);
String a[] = Span.spansToStrings(sp, cnt);
StringBuilder fd = new StringBuilder();
int l = a.length;
for (int j = 0; j < l; j++) {
fd = fd.append(a[j] + "\n");
}
sd = fd.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sd;
}
public String orgfind(String cnt[]) {
InputStream is;
TokenNameFinderModel tnf;
NameFinderME nf;
String sd = "";
try {
is = new FileInputStream(
"/home/rahul/opennlp/model/en-ner-organization.bin");
tnf = new TokenNameFinderModel(is);
nf = new NameFinderME(tnf);
Span sp[] = nf.find(cnt);
String a[] = Span.spansToStrings(sp, cnt);
StringBuilder fd = new StringBuilder();
int l = a.length;
for (int j = 0; j < l; j++) {
fd = fd.append(a[j] + "\n");
}
sd = fd.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sd;
}
public void tokenization(String tokens) {
InputStream is;
TokenizerModel tm;
try {
is = new FileInputStream("/home/rahul/opennlp/model/en-token.bin");
tm = new TokenizerModel(is);
Tokenizer tz = new TokenizerME(tm);
Tokens = tz.tokenize(tokens);
// System.out.println(Tokens[1]);
} catch (IOException e) {
e.printStackTrace();
}
}
}
并且您想要位置,然后导入openNLP source Forge上可用的位置模型。您可以下载并可以使用它们。
我不确定名称,位置和组织提取的可能性,但几乎可识别所有名称,位置和组织。
和如果找不到openNLP,那么使用Stanford Parser进行名称实体识别。
答案 1 :(得分:0)
找出句子的字面时态并不简单,但在某些情况下可行。 OpenNLP解析器将创建一个句子结构,您可以从中尝试提取头部动词,并且一些形态分析将告诉您动词是存在还是过去(英语),并且对于模型和#34;将&#34;在某些情况下会给你将来的时态。但它并不总是那么简单。例如,在&#34;去巴黎耗尽了我的银行账号&#34;,你有一个嵌入式事件(去巴黎),这在过去发生过,但要弄明白这一点很棘手。而你未来的例子(&#34;我正在计划......&#34;)需要对“&#34;计划&#34;”这个词有什么现实的理解。意思是,这很复杂。这类事情是自然语言处理研究的主题。