r - 如何通过 quanteda 中至少有 n 个术语的文档过滤 dfm?
问题描述
我正在分析来自圆桌会议的文本数据,我想知道是否可以仅过滤那些具有超过“n”个术语的文档?
我的语料库中的文档仅包含 1 个单词,例如:“Thanks”、“Sometimes”、“Really”、“go”。我想删除然后以减少稀疏性。
我试过但我无法处理dfm_trim
:quanteda
corpus_post80inaug <- corpus_subset(data_corpus_inaugural, Year > 1980)
dfm <- dfm(corpus_post80inaug)
ntoken(dfm)
1981-Reagan 1985-Reagan 1989-Bush 1993-Clinton 1997-Clinton
2790 2921 2681 1833 2449
2001-Bush 2005-Bush 2009-Obama 2013-Obama 2017-Trump
1808 2319 2711 2317 1660
dfm <- dfm_trim(dfm, min_docfreq = 2000)
ntoken(dfm)
1981-Reagan 1985-Reagan 1989-Bush 1993-Clinton 1997-Clinton
0 0 0 0 0
2001-Bush 2005-Bush 2009-Obama 2013-Obama 2017-Trump
0 0 0 0 0
我预计只有 1993-Clinton、2001-Bush 和 2017-Trump 的值为 0,或者摆脱dfm
. Obs.:此示例仅用于说明目的,它不是我要分析的文本数据。
解决方案
你应该使用dfm_subset
,而不是dfm_trim
。dfm_trim
计算所有文档的频率,而不是每个文档。尽管您可以指定该术语应出现的最小(或最大)文档。对于删除文档,我们使用dfm_subset
.
corpus_post80inaug <- corpus_subset(data_corpus_inaugural, Year > 1980)
dfm <- dfm(corpus_post80inaug)
# remove documents with less than 2000 tokens.
my_dfm <- dfm_subset(dfm, ntoken(dfm) >= 2000)
ntoken(my_dfm)
1981-Reagan 1985-Reagan 1989-Bush 1997-Clinton 2005-Bush 2009-Obama 2013-Obama
2790 2921 2681 2449 2319 2711 2317
推荐阅读
- c# - 如何在 C# 中将数字转换为无符号短(始终为 16 位,大端字节序)
- vue.js - 如何使用 vue boostrap 将类添加到弹出窗口?
- html - html flex:项目周围没有高度扩展的边框
- swift - 如何获取数据库中的所有用户“用户名”?
- c# - 如果我在学分场景之前进入游戏场景,Unity 2018 脚本使面板向上滚动将不起作用
- python - 如何按不同截止日期按月分组?
- java - 如何从jsp视图返回选定项目的列表?
- hibernate - JPA 规范将 sum 与 Join 结合使用
- database - ORA-00600: 内部错误代码, 参数: [pesld103_MMap: errno 1 errmsg Opetation not allowed],
- mysql - MySQL & MySQL Workbench 中的 sql 查询使用了多少互联网流量