首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MetaPhone函数(如SoundEx)函数及其在R?

MetaPhone函数(如SoundEx)函数及其在R?
EN

Stack Overflow用户
提问于 2015-01-01 00:50:55
回答 4查看 3K关注 0票数 8

我希望使用MetaPhone双元电话机卡弗福涅、MetaPhone3、SoundEx,如果有人已经在'R‘中完成了NameX函数,那么我就可以在分析之前对数据清理操作进行分类和汇总,以最小化数据清理操作。

我充分意识到,每种算法都有其自身的优点和缺点,更倾向于不使用SoundEx,但如果我找不到替代方法,它可能仍然有效;就像在这篇文章中提到 Harper会匹配SoundEx下的任何一个不相关的名称列表一样,但在Metaphone中不应该为了更好的结果匹配而工作。

虽然我不确定哪个最适合我的目的,同时仍然保持了一些灵活性,所以这就是为什么我想尝试一下其中的几个,并且在查看这些值之前,生成如下表。

表源链接

姓氏不是我最初分析的主题,但我认为这是一个很好的例子,因为我想有效地考虑所有类似于“听起来”的词被视为相同的价值,这就是我试图用一个简单的称呼来做的事情--当价值被评估时。

有些事情我已经看过了:

  • 我知道C包可以用RCpp编写和调用,甚至还有用于SE上的SoundEx的C解决方案,但是我以前还没有编写一个R包,如果有一种更简单的方法直接在R中实现,或者有一个具有可用功能的包存在,我希望避免重新发明轮子?
  • 我知道RecordLinkage和现在的弦乐包有一个SoundEx函数,但没有任何形式的MetaPhone函数。

因此,我特别寻找一个答案是如何在R中的MetaPhone / Caverphone函数,并知道“值”,以便我可以按它们分组数据值?

另外的警告是,我仍然认为我自己是相当新的R,因为我不是一个日常的用户。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-11 13:37:56

算法非常简单,但我也找不到一个现有的R包。如果您真的需要在R中完成这项工作,一个短期选项是安装python模块metaphone (pip install metaphone),然后使用rPython桥在R中使用它:

代码语言:javascript
复制
library(rPython)

python.exec("from metaphone import doublemetaphone")
python.call("doublemetaphone", "architect")
[1] "ARKTKT" ""

这不是最优雅的解决方案,但它可以让您在R中运行metaphone。

Apache有一个编解码器库,它还实现了metaphone算法:

代码语言:javascript
复制
library(rJava)

.jinit() # need to have commons-codec-1.10.jar in your CLASSPATH

mp <- .jnew("org.apache.commons.codec.language.Metaphone")
.jcall(mp,"S","metaphone", "architect")
[1] "ARXT"

您可以将上面的.jcall变成一个R函数,并像其他任何R函数一样使用它:

代码语言:javascript
复制
metaphone <- function(x) {
  .jcall(mp,"S","metaphone", x)  
}

sapply(c("abridgement", "stupendous"), metaphone)

## abridgement  stupendous 
##      "ABRJ"      "STPN"

跨平台的java接口也可能更兼容。

下面是使用java接口的更完整的视图:

代码语言:javascript
复制
library(rJava)

.jinit()

mp <- .jnew("org.apache.commons.codec.language.Metaphone")
dmp <- .jnew("org.apache.commons.codec.language.DoubleMetaphone")

metaphone <- function(x) {
  .jcall(mp,"S","metaphone", x)  
}

double_metaphone <- function(x) {
  .jcall(dmp,"S","doubleMetaphone", x)  
}

words <- c('Catherine', 'Katherine', 'Katarina', 'Johnathan', 
           'Jonathan', 'John', 'Teresa', 'Theresa', 'Smith', 
           'Smyth', 'Jessica', 'Joshua')

data.frame(metaphone=sapply(words, metaphone),
           double=sapply(words, double_metaphone))

##           metaphone double
## Catherine      K0RN   K0RN
## Katherine      K0RN   K0RN
## Katarina       KTRN   KTRN
## Johnathan      JN0N   JN0N
## Jonathan       JN0N   JN0N
## John             JN     JN
## Teresa          TRS    TRS
## Theresa         0RS    0RS
## Smith           SM0    SM0
## Smyth           SM0    SM0
## Jessica         JSK    JSK
## Joshua           JX     JX
票数 10
EN

Stack Overflow用户

发布于 2015-04-17 05:02:36

现在,在RPGRdup中实现了双元电话。

代码语言:javascript
复制
install.packages(PGRdup)
library(PGRdup)
words <- c('Catherine', 'Katherine', 'Katarina', 'Johnathan', 
           'Jonathan', 'John', 'Teresa', 'Theresa', 'Smith', 
           'Smyth', 'Jessica', 'Joshua')
DoubleMetaphone(words)

$primary
 [1] "K0RN" "K0RN" "KTRN" "JN0N" "JN0N" "JN"   "TRS"  "0RS"  "SM0"  "SM0"  "JSK"  "JX"  

$alternate
 [1] "KTRN" "KTRN" "KTRN" "ANTN" "ANTN" "AN"   "TRS"  "TRS"  "XMT"  "XMT"  "ASK"  "AX"  
票数 9
EN

Stack Overflow用户

发布于 2015-12-26 15:29:24

我一直在为这个程序设计一个包,名为phonic几个月。我已经实现了一些常见和不常见的功能,包括Caverphone、Caverphone2、Metaphone和soundex。其他一些也得到了落实。在调用1.0之前,我还有一些计划实现,但我刚刚向CRAN提交了一个包的发行版。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27727584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档