【问题标题】:Does tm automatically ignore the very short strings?tm 会自动忽略非常短的字符串吗?
【发布时间】:2016-11-09 02:39:08
【问题描述】:

这是我的代码: 示例 1:

a <- c("ab cd de","ENERGIZER A23 12V ALKALINE BATTERi")
a1 <- VCorpus(VectorSource(a))
a2 <- TermDocumentMatrix(a1,control = list(stemming=T))
inspect(a2)

结果是:

         Docs
Terms     1 2
  12v     0 1
  a23     0 1
  alkalin 0 1
  batteri 0 1
  energ   0 1

看起来 a 中的第一个字符串被忽略了。

示例 2

a <- c("abcd cde de","ENERGIZER A23 12V ALKALINE BATTERi")
a1 <- VCorpus(VectorSource(a))
a2 <- TermDocumentMatrix(a1,control = list(stemming=T))
inspect(a2)

结果是:

         Docs
Terms     1 2
  12v     0 1
  a23     0 1
  abcd    1 0
  alkalin 0 1
  batteri 0 1
  cde     1 0
  energ   0 1

我们可以看到两个子字符串 (abcd, cde) 被保留,而最靠前的一个 (de) 仍然丢失。如果我不使用 control = list(stemming=T),情况也是一样的。所以,我很好奇这是否是 tm 中的一种定义?如果少于 3 个字母,字符串将被忽略?我不认为这是一个好主意。一个字符串很有可能是有用的,即使它很短,例如缩写。

如果是这样,是否有参数或其他东西可以改变这一点?非常感谢。

【问题讨论】:

  • 您可能想尝试另一个 NLP 包,例如 quanteda

标签: r tm term-document-matrix


【解决方案1】:

?termFreq。您必须设置的选项是wordLengths。来自文档:

长度为 2 的整数向量。单词较短 大于最小字长‘wordLengths[1]’或更长 大于最大字长‘wordLengths[2]’ 丢弃。默认为“c(3, Inf)”,即最小单词 长度为 3 个字符。

所以,如果您不想排除短词,您可以:

a2 <- TermDocumentMatrix(a1,control = list(stemming=T,wordLengths=c(1,Inf)))
inspect(a2)
         Docs
Terms     1 2
  12v     0 1
  a23     0 1
  ab      1 0
  alkalin 0 1
  batteri 0 1
  cd      1 0
  de      1 0
  energ   0 1

【讨论】:

  • 是的!很高兴知道。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多