1

我想使用结构如下的波兰引理的外部 txt 文件:(许多其他语言的引理来源http://www.lexiconista.com/datasets/lemmatization/

Abadan  Abadanem
Abadan  Abadanie
Abadan  Abadanowi
Abadan  Abadanu
abadańczyk  abadańczycy
abadańczyk  abadańczyka
abadańczyk  abadańczykach
abadańczyk  abadańczykami
abadańczyk  abadańczyki
abadańczyk  abadańczykiem
abadańczyk  abadańczykom
abadańczyk  abadańczyków
abadańczyk  abadańczykowi
abadańczyk  abadańczyku
abadanka    abadance
abadanka    abadanek
abadanka    abadanką
abadanka    abadankach
abadanka    abadankami

什么包和什么语法,可以让我使用这样的 txt 数据库来对我的词袋进行词形还原。我意识到,对于英语有 Wordnet,但对于那些想将这个功能用于稀有语言的人来说没有运气。

如果没有,这个数据库是否可以转换为对任何提供词形还原的包有用?也许通过将其转换为广泛的形式?例如,免费的 AntConc concordancer 使用的表格,( http://www.laurenceanthony.net/software/antconc/ )

Abadan -> Abadanem, Abadanie, Abadanowi, Abadanu
abadańczyk -> abadańczycy, abadańczyka, abadańczykach 
etc.

简而言之:如何在任何已知的 CRAN R 文本挖掘包中使用 txt 文件中的词条进行词条化?如果是这样,如何格式化这样的txt文件?

更新:亲爱的@DmitriySelivanov 我摆脱了所有变音符号,现在我想将它应用于 tm corpus "docs"

docs <- tm_map(docs, function(x) lemma_tokenizer(x, lemma_hashmap="lemma_hm")) 

我尝试将其作为标记器

LemmaTokenizer <- function(x) lemma_tokenizer(x, lemma_hashmap="lemma_hm")

docsTDM <-
  DocumentTermMatrix(docs, control = list(wordLengths = c(4, 25), tokenize=LemmaTokenizer)) 

它向我抛出了一个错误:

 Error in lemma_hashmap[[tokens]] : 
  attempt to select more than one element in vectorIndex 

该函数可以使用文本向量作为魅力。

4

1 回答 1

3

我的猜测是,这里与此任务的文本挖掘包无关。您只需将第二列中的单词替换为第一列中的单词。您可以通过创建 hashmap 来做到这一点(例如https://github.com/nathan-russell/hashmap)。

下面是如何创建“lemmatizing”标记器的示例,您可以在text2vec中轻松使用它(我猜也是 quanteda)。

非常欢迎为创建这种“lemmatizing”包所做的贡献——这将非常有用。

library(hashmap)
library(data.table)
txt = 
  "Abadan  Abadanem
  Abadan  Abadanie
  Abadan  Abadanowi
  Abadan  Abadanu
  abadańczyk  abadańczycy
  abadańczyk  abadańczykach
  abadańczyk  abadańczykami
  "
dt = fread(txt, header = F, col.names = c("lemma", "word"))
lemma_hm = hashmap(dt$word, dt$lemma)

lemma_hm[["Abadanu"]]
#"Abadan"


lemma_tokenizer = function(x, lemma_hashmap, 
                           tokenizer = text2vec::word_tokenizer) {
  tokens_list = tokenizer(x)
  for(i in seq_along(tokens_list)) {
    tokens = tokens_list[[i]]
    replacements = lemma_hashmap[[tokens]]
    ind = !is.na(replacements)
    tokens_list[[i]][ind] = replacements[ind]
  }
  tokens_list
}
texts = c("Abadanowi abadańczykach OutOfVocabulary", 
          "abadańczyk Abadan OutOfVocabulary")
lemma_tokenizer(texts, lemma_hm)

#[[1]]
#[1] "Abadan"          "abadańczyk"      "OutOfVocabulary"
#[[2]]
#[1] "abadańczyk"      "Abadan"          "OutOfVocabulary"
于 2017-08-21T06:12:04.180 回答