与R匹配的字符串:找到最佳匹配

时间:2017-09-23 01:48:51

标签: r regex string text-mining lexicon

我有两个单词的矢量。

Corpus<- c('animalada', 'fe', 'fernandez', 'ladrillo')

Lexicon<- c('animal', 'animalada', 'fe', 'fernandez', 'ladr', 'ladrillo')

我需要在Lexicon和Corpus之间做出最好的匹配。 我尝试了很多方法。这是其中之一。

library(stringr)

match<- paste(Lexicon,collapse= '|^') # I use the stemming method (snowball), so the words in Lexicon are root of words

test<- str_extrac_all (Corpus,match,simplify= T)

test

[,1]
[1,] "animal"
[2,] "fe"
[3,] "fe"
[4,] "ladr"

但是,比赛应该是:

[1,] "animalada"
[2,] "fe"
[3,] "fernandez"
[1,] "ladrillo"

相反,匹配是在我的Lexicon中按字母顺序排列的第一个单词。顺便说一下,这些向量是我所拥有的更大列表的样本。

我没有尝试使用regex(),因为我不确定它是如何工作的。也许解决方案就是这样。

你能帮我解决这个问题吗?谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用match功能。

Index <- match(Corpus, Lexicon)

Index
[1] 2 3 4 6

Lexicon[Index]
[1] "animalada"  "fe"   "fernandez"  "ladrillo"

答案 1 :(得分:0)

您可以按照图案的字符数按{1}}的顺序排序,以便最佳匹配:

Lexicon

答案 2 :(得分:0)

我尝试了两种方法,而正确的方法是@Psidorm建议的。 如果使用函数match(),这将在单词的任何部分找到匹配,不一定是开头。例如:

Corpus<- c('tambien')
Lexicon<- c('bien')
match(Corpus,Lexicon)

结果是'tambien',但这不正确。

再次感谢你们的帮助!!