【发布时间】:2011-06-03 18:58:49
【问题描述】:
我想查询R包openNLP中是否可以提取名词+名词或(adj|noun)+名词?也就是说,我想使用语言过滤来提取候选名词短语。你能指导我怎么做吗? 非常感谢。
感谢您的回复。 这是代码:
library("openNLP")
acq <- "Gulf Applied Technologies Inc said it sold its subsidiaries engaged in
pipeline and terminal operations for 12.2 mln dlrs. The company said
the sale is subject to certain post closing adjustments,
which it did not explain. Reuter."
acqTag <- tagPOS(acq)
acqTagSplit = strsplit(acqTag," ")
acqTagSplit
qq = 0
tag = 0
for (i in 1:length(acqTagSplit[[1]])){
qq[i] <-strsplit(acqTagSplit[[1]][i],'/')
tag[i] = qq[i][[1]][2]
}
index = 0
k = 0
for (i in 1:(length(acqTagSplit[[1]])-1)) {
if ((tag[i] == "NN" && tag[i+1] == "NN") |
(tag[i] == "NNS" && tag[i+1] == "NNS") |
(tag[i] == "NNS" && tag[i+1] == "NN") |
(tag[i] == "NN" && tag[i+1] == "NNS") |
(tag[i] == "JJ" && tag[i+1] == "NN") |
(tag[i] == "JJ" && tag[i+1] == "NNS"))
{
k = k +1
index[k] = i
}
}
index
读者可以参考acqTagSplit上的index进行名词+名词或(adj|noun)+名词的提取。 (代码不是最佳的,但可以工作。如果您有任何想法,请告诉我。)
此外,我还有一个问题。
Justeson 和 Katz (1995) 提出了另一种语言过滤来提取候选名词短语:
((Adj|Noun)+|((Adj|Noun)(Noun-Prep)?)(Adj|Noun))名词
我不能很好地理解它的含义。您能否帮我解释一下或将这种表示形式转换为 R 语言。 非常感谢。
【问题讨论】:
-
发布了我认为是干净的解决方案。您后来的请求是对原始问题的相当大的扩展。我认为你应该关闭这个并提出另一个问题。
-
@DWin:我不这么认为。它只是增加了一些额外的条件。另外,将其翻译成 R 将是文本挖掘者的问题,而不是程序员的问题。我建议 ssuhan 阅读 Justeson 和 Katz 的文章以了解其含义。
-
@Joris:有几个新的运算符“+”和“?”我不明白。我认为它们可能会以某种方式转换为正则表达式,但我不知道,并且在网络搜索中无法获得引用。所以我认为重新发布会是一种更好的方法,因为原始问题已经得到了 OP 和我在精简方面的努力的回答。
标签: r nlp opennlp pos-tagger