0

我有两个单词向量。

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"

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

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

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

4

3 回答 3

1

你可以只使用match函数。

Index <- match(Corpus, Lexicon)

Index
[1] 2 3 4 6

Lexicon[Index]
[1] "animalada"  "fe"   "fernandez"  "ladrillo"
于 2017-09-23T01:59:20.540 回答
0

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

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

结果是“tambien”,但这是不正确的。

再次感谢两位的帮助!!

于 2017-09-27T03:16:36.203 回答
0

您可以按Lexicon模式具有的字符数以降序排列,因此最好的匹配首先出现:

match<- paste(Lexicon[order(-nchar(Lexicon))], collapse = '|^')

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

test
#     [,1]       
#[1,] "animalada"
#[2,] "fe"       
#[3,] "fernandez"
#[4,] "ladrillo" 
于 2017-09-23T01:54:24.367 回答