是否有识别单词的功能?

时间:2015-12-29 16:12:20

标签: r

有没有办法评估一个字符串,看看它是否用英语评估一个单词?这就是我要找的东西

is.word("hello world")
[1] FALSE

is.word(c("hello", "world")
[1] TRUE TRUE

由于没有is.word逻辑功能,上述功能无效。

2 个答案:

答案 0 :(得分:9)

正如评论所指出的那样,你需要一本英语字典来匹配。 #!/bin/bash type="hs1.8xlarge" curl -s -L -k https://pricing.us-east-1.amazonaws.com/offers/v1.0/aws/AmazonEC2/current/index.json | jq --arg type "$type" '.products[] | select(.attributes.instanceType | endswith($type)).sku' 包中的gradyAugmented对象就是这样一个字典:

  

包含Grady Ward英文单词矢量的数据集        增加了'DICTIONARY',Mark Kantrowitz的名单,其他        专有名词和收缩。

qdapDictionary

答案 1 :(得分:1)

不,R 中没有这样的功能。

虽然您可以轻松实施天真的方法,但在10个案例中有9个可以使用。

自定义解决方案

首先,您需要一个与您的数据匹配的“单词”字典。其中一个字典由GNU人员编译,并在SCOWL (And Friends)网站的开源许可证下发布。

下载数据文件并解压缩。单词分散在多个文件中,后缀表示区域,类别和共性(或日常英语用户不熟悉单词的概率)。使用list.files()函数和pattern参数或grepl()函数,您可以选择您关注的确切字典集。

# set path to extracted package
words.dir <- '/tmp/scowl-2015.08.24/final/'
words <- unlist(sapply(list.files(words.dir, pattern='[1-6][05]$', full.names=TRUE), readLines, USE.NAMES=FALSE))
# For some reason most frequent words are not in "final" dir…
words <- c(words, readLines(paste0(words.dir, '../r/special/frequent')))
length(words)
# [1] 143681

然后验证单词是否为英语就像检查它是否存在于已知单词的向量中一样简单。好消息是你可以免费获得矢量化。

c("knight", "stack", "selfie", "l8er", "googling", "echinuliform") %in% words
# [1]  TRUE  TRUE  TRUE FALSE  TRUE  FALSE

核心问题

真正的问题是“什么算作字?”。 “谷歌搜索”算作单词吗?它现在常用,但15年前并非如此。那么“echinuliform”呢?我想很多母语人士都不会理解它。

讨论这个问题超出了本网站的范围,但语言有一定的随意性,目前还没有计算机程序能够应对。