如何按词性筛选语料分词并移除词性后缀构建文档特征矩阵
基于spacyr与quanteda的词性筛选、标注移除操作方案
以下操作完全适配你当前的法语语料处理流程,直接基于已生成的带词性标注tokens对象即可运行。
1. 筛选指定词性(PRON、VERB)分词
直接使用quanteda内置的tokens_select()函数,通过glob通配符匹配所有以目标词性结尾的token,无需额外拆分字符串:
library(quanteda) # 假设你通过as.tokens()生成的带词性分词对象名为toks_with_pos toks_pron_verb <- tokens_select( x = toks_with_pos, pattern = "*/(PRON|VERB)$", valuetype = "glob", selection = "keep" )
运行后得到的toks_pron_verb和你给出的预期输出完全一致,仅保留代词、动词两类分词。如果后续需要新增筛选的词性(比如名词NOUN、形容词ADJ),直接在括号内补充即可,格式为(PRON|VERB|NOUN|ADJ)。
2. 移除词性标注后缀并构建文档-特征矩阵
两种实现方式,按需选择即可:
方式一:基于已筛选的带词性tokens直接处理
通过tokens_replace()批量移除末尾的/词性后缀,不需要写复杂的正则表达式:
# 移除所有token末尾的词性标注 toks_clean <- tokens_replace( x = toks_pron_verb, pattern = "*/([A-Z]+)$", replacement = "*", valuetype = "glob" ) # 直接生成文档-特征矩阵 my_dfm <- dfm(toks_clean)
方式二:优化前置流程,避免重复操作
你可以在spacy_parse()输出结果后先做词性过滤,再生成不带标注的tokens,省去拼接、删除后缀的步骤。
注意:如果你的语料中存在本身包含/字符的特殊词汇,优先选择该前置过滤流程,避免后缀匹配错误。
library(spacyr) # 运行spacy词形还原与词性标注 spacy_parsed <- spacy_parse(your_raw_corpus, lemma = TRUE, pos = TRUE) # 提前过滤需要的词性 spacy_filtered <- spacy_parsed[spacy_parsed$pos %in% c("PRON", "VERB"), ] # 直接基于词元生成无词性标注的tokens对象 toks_lemma <- as.tokens(spacy_filtered, use_lemma = TRUE, include_pos = "none") # 生成文档-特征矩阵 my_dfm <- dfm(toks_lemma)
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

