r - 非孤立词的文本挖掘

标签 r text text-mining

我有一个数据集(PostgresDB 中的一个很长的列),其中数据按以下方式保存:

**Variable_1** 
honey-pot 
treesarecool 
this-is-my-honeypot 
thisismyhonepot 
honey-is-sweet 
treesfurniture 
honeybees-production 
themoonisgone 
tableproduction

有时单词是孤立的,例如“honey”,有时它们是较长单词的一部分,例如“honeypot”“honeybees”嗯>。我最终想要一个包含最常见单词的频率表,如下所示:

Frequency Table: 
Honey     4 
trees     2 
Table     1 
pot       1 
namek     1
gone      1 
furniture 1 
his       n 
are       n 
pro       n 
duc       n 
tio       n 
...     ...

我没有要查找的特定单词列表(在这种情况下我会使用 grep())。我没有文本挖掘方面的经验,但经过一些研究,我发现大多数文本挖掘工具(tm)都需要隔离单词(“蜂蜜是甜的”),以便能够汇总并分析它们。所以我想我正在寻找的是一个使用暴力比较字符串的工具。例如,查找长度超过 3 个字符的所有相似字符串(在频率表中用“n”表示。

我的假设正确吗? R中有没有一个工具可以完成这个任务?还有其他想法、建议吗?

感谢!

更新1

在尝试了 Adam 的解决方案一周后,我可以提出以下建议来分析上述字符串:

  1. 删除所有“-”、“_”和“.”极大地有助于减少不相关/无趣的 ngram 的数量。我有兴趣在我的数据库中查找给定单词的频率,这些标志对此类分析没有任何贡献,而只是夸大了结果数据集。

  2. 删除数字 [0-9] 也有助于减少 ngram 的数量。除非您还想要特定号码的频率(例如 0041 预拨代码或此类...)。我会删除它们并稍后进行单独的数字分析(通过删除所有字符和符号并只留下数字)。但这很大程度上取决于您的目标是什么!

  3. 清理您的数据!!!这是我对字符串的第一次分析,我最重要的收获是干净的数据一如既往,对实现您的目标大有帮助!

最佳答案

您可以使用 quanteda 包将每个单词tokenize() 转换为一组字符 ngram,然后将结果制成表格。

下面的代码迭代单词并将它们拆分为长度范围在以下范围内的 ngram:[3, nchar(word)]

随着输入单词数量的增加,char_ngrams 对象的大小会快速增长。所以不确定它的扩展效果如何。

library(quanteda)

#create exapmle data
words = c("honey-pot",
          "treesarecool",
          "this-is-my-honeypot",
          "thisismyhonepot",
          "honey-is-sweet",
          "treesfurniture",
          "honeybees-production",
          "themoonisgone",
          "tableproduction")

#perform char ngram tokenization
char_ngrams = unlist(
  lapply(words, function(w) {
    unlist(
      tokenize(w,
               "character",
               ngrams=3L:nchar(w),
               conc="")
      )
    })
)

#show most popular character ngrams
head(sort(table(char_ngrams), decreasing = TRUE))
#char_ngrams
# one   hon  hone honey   ney  oney 
# 6     5     5     4     4     4 

关于r - 非孤立词的文本挖掘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46913739/

相关文章:

r - 按行/列名称在第三个维度上连接数据框

r - R中的序列组合矩阵

java - 如何使用 Spark 从多个文档中获取术语文档矩阵?

python - Rouge Score 附加列表

r - 向量化嵌套 for 循环,R

HTML 和 CSS 文本背景黑色

c++ - SFML 2.4.2 在绘制 sf::Text 对象之前获取 localBounds

java - 以对齐网格格式打印纯文本

r - 无法将语料库转换为 R 中的数据帧

Xubuntu 16.04 上的 R 升级/安装