gpt4 book ai didi

r - 从文本中提取名词+名词或(形容词|名词)+名词

转载 作者:行者123 更新时间:2023-12-02 06:48:10 25 4
gpt4 key购买 nike

是否可以使用 R 包 openNLP 提取 noun+noun(adj|noun)+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上的索引来执行名词+名词(adj|名词)+名词萃取。 (该代码不是最佳的,但它可以工作。如果您有任何想法,请告诉我。)

我还有一个问题:

Justeson 和 Katz (1995) 提出了另一种语言过滤来提取候选名词短语:

((Adj|Noun)+|((Adj|Noun)*(Noun-Prep)?)(Adj|Noun)*)Noun

我不太明白它的意思。你能帮我解释一下吗?或者展示如何用R语言编写过滤规则?非常感谢。

最佳答案

我没有一个开放的控制台来测试这个,但是你可以尝试使用 tagPOS 进行标记,然后 grep 查找“名词”,“名词”或者粘贴(tagPOS(acq),崩溃=“。” )并搜索“名词.名词”。然后可以使用 gregexpr 来提取位置。

编辑:标记输出的格式与我内存中的有点不同。我认为这种用“\n”替换空格后的 read.table()-ing 方法比我上面看到的要高效得多:

 acqdf <- read.table(textConnection(gsub(" ", "\n", acqTag)), sep="/", stringsAsFactors=FALSE)
acqdf$nnadj <- grepl("NN|JJ", acqdf$V2)
acqdf$nnadj
# [1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
#[16] FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE TRUE
#[31] TRUE FALSE FALSE FALSE FALSE TRUE FALSE
acqdf$nnadj[1:(nrow(acqdf)-1)] & acqdf$nnadj[2:nrow(acqdf)]
# [1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
#[16] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
#[31] FALSE FALSE FALSE FALSE FALSE FALSE
acqdf$pair <- c(NA, acqdf$nnadj[1:(nrow(acqdf)-1)] & acqdf$nnadj[2:nrow(acqdf)])
acqdf[1:7, ]

V1 V2 nnadj pair
1 Gulf NNP TRUE NA
2 Applied NNP TRUE TRUE
3 Technologies NNP TRUE TRUE
4 Inc NNP TRUE TRUE
5 said VBD FALSE FALSE
6 it PRP FALSE FALSE
7 sold VBD FALSE FALSE

关于r - 从文本中提取名词+名词或(形容词|名词)+名词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4600612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com