假设我从wordnet中提取"help“的同义词,并从wordnet获取以下内容:
Str = synonyms("help")
Str
[1] "c(\"aid\", \"assist\", \"assistance\", \"help\")"
[2] "c(\"aid\", \"assistance\", \"help\")"
[3] "c(\"assistant\", \"helper\", \"help\", \"supporter\")"
[4] "c(\"avail\", \"help\", \"service\")" 然后,我可以使用以下命令获得一个字符串
unique(unlist(lapply(parse(text=Str),eval)))最后,它看起来像这样:
[1] "aid" "assist" "assistance" "help" "assistant" "helper" "supporter"
[8] "avail" "service"上述过程是由Gabor Grothendieck提出的。他/她的解决方案很好,但我仍然不能确定如果我将查询条件更改为“公司”、“男孩”或其他人,是否会响应错误消息。
一个可能的原因可能是由于"company“的”第六个“同义词(请参见下面)是一个单独的术语,并且不遵循"c(\"company\")”的格式。
synonyms("company")
[1] "c(\"caller\", \"company\")"
[2] "c(\"company\", \"companionship\", \"fellowship\", \"society\")"
[3] "c(\"company\", \"troupe\")"
[4] "c(\"party\", \"company\")"
[5] "c(\"ship's company\", \"company\")"
[6] "company"有没有人能帮我解决这个问题?非常感谢。
发布于 2011-09-22 18:28:41
可以通过创建一个小帮助器函数来解决这个问题,该函数使用R的try机制来捕获错误。在这种情况下,如果eval产生错误,则返回原始字符串,否则返回eval的结果
创建一个辅助函数:
evalOrValue <- function(expr, ...){
z <- try(eval(expr, ...), TRUE)
if(inherits(z, "try-error")) as.character(expr) else unlist(z)
}
unique(unlist(sapply(parse(text=Str), evalOrValue)))产生:
[1] "caller" "company" "companionship"
[4] "fellowship" "society" "troupe"
[7] "party" "ship's company"我复制了您的数据,然后使用dput在这里复制了它:
Str <- c("c(\"caller\", \"company\")", "c(\"company\", \"companionship\", \"fellowship\", \"society\")",
"c(\"company\", \"troupe\")", "c(\"party\", \"company\")", "c(\"ship's company\", \"company\")",
"company")发布于 2011-09-22 21:41:00
这些同义词的形式看起来像一个表达式,因此您应该能够像您所演示的那样解析它们。但是:当我执行上面的原始代码时,我从同义词调用中得到一个错误,因为您没有包含词性参数。
> synonyms("help")
Error in charmatch(x, WN_synset_types) :
argument "pos" is missing, with no default注意到synonyms的代码使用了getSynonyms,并且它的代码包含了一个unique,因此您正在进行的所有预处理都不再需要(如果您进行了更新):
> synonyms("company", "NOUN")
[1] "caller" "companionship" "company"
[4] "fellowship" "party" "ship's company"
[7] "society" "troupe"
> synonyms
function (word, pos)
{
filter <- getTermFilter("ExactMatchFilter", word, TRUE)
terms <- getIndexTerms(pos, 1L, filter)
if (is.null(terms))
character()
else getSynonyms(terms[[1L]])
}
<environment: namespace:wordnet>
> getSynonyms
function (indexterm)
{
synsets <- .jcall(indexterm, "[Lcom/nexagis/jawbone/Synset;",
"getSynsets")
sort(unique(unlist(lapply(synsets, getWord))))
}
<environment: namespace:wordnet>https://stackoverflow.com/questions/7512472
复制相似问题