首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NLP:操作码数据集上的词干分析

NLP:操作码数据集上的词干分析
EN

Stack Overflow用户
提问于 2019-02-26 04:22:48
回答 1查看 107关注 0票数 0

我有一个包含27个文件的数据集,每个文件都包含操作码。我想使用词干分析将相似操作码的所有版本映射到相同的操作码。例如: push、pusha、push B等都映射到push;addf addi到add,multi到mult,等等)。我如何做到这一点呢?我尝试将PorterStemmer与NLTK扩展一起使用,但它在我的数据集上不起作用。我认为它只适用于正常的人类语言单词。(像播放,播放-->播放),而不是像(pusha,push b --> push)这样的操作码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 04:36:44

我不认为词干是您想要在这里做的。词干分析器是特定于语言的,并且基于该语言中常见的词形变化模式。例如,在英语中,你有动词的不定式形式(例如,“走”),它变成了时态、体和人称/数字的变化:I walk vs. walks (walk+s),I Wals. vs. walked (walk+ed),还有walk+ing,等等。词干分析器将这些随机分布编码成“规则”,然后应用于“单词”,以改变其词干。换句话说,您的操作码不存在现成的词干分析器。

您有两种可能的解决方案:(1)创建字典或(2)编写自己的词干分析器。如果您没有太多的变体要映射,那么创建一个自定义字典可能是最快的,其中您使用所有单词变体作为键,并将词条/词干/规范形式作为值。

代码语言:javascript
运行
复制
addi -> add
addf -> add
multi -> mult
multf -> mult

如果您的潜在映射太多而无法手工完成,那么您可以编写一个自定义的正则表达式词干分析器来执行映射和转换。下面的函数接受一个输入词,并尝试将其与代表词干的所有变体的模式进行匹配,以获取集合中所有的n词干。它返回一个1 x n data.frame,其中1表示存在,0表示不存在变体匹配。

代码语言:javascript
运行
复制
#' Return word's stem data.frame with each column indicating presence (1) or 
#' absence (0) of stem in that word.
map_to_stem_df <- function(word) {
  ## named list of patterns to match
  stem_regex <- c(add = "^add[if]$", 
                  mult = "^mult[if]$")

  ## iterate across the stem names
  res <- lapply(names(stem_regex), function(stem) {

    pat <- stem_regex[stem]
    ## if pattern matches word, then 1 else 0
    if (grepl(pattern = pat, x = word))  {
      pat_match <- 1
    } else {
      pat_match <- 0  
    }
    ## create 1x1 data.frame for stem
    df <- data.frame(pat_match) 
    names(df) <- stem
    return(df)
  })
  ## bind all cols into single row data.frame 1 x length(stem_regex) & return
  data.frame(res)

}

map_to_stem_df("addi")
#  add mult
#    1    0

map_to_stem_df("additional")
# add mult
#   0    0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54874069

复制
相关文章

相似问题

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