如何使用R语言NLP算法从PDF中提取VERB-Noun动词名词对
R语言提取PDF文本中动词-名词对实操方案
步骤1:提取PDF文本内容
使用pdftools包完成PDF文本读取,适合绝大多数非扫描版PDF文件:
- 安装并加载包:
install.packages("pdftools") library(pdftools)
- 读取并合并PDF文本:
# 替换为你的本地PDF路径 raw_text <- pdf_text("target_file.pdf") # 多页PDF合并为单个文本字符串 full_text <- paste(unlist(raw_text), collapse = " ")
你给出的示例文本可直接赋值测试:
sample_text <- "Represent clients in criminal and civil litigation and other legal proceedings, draw up legal documents, or manage or advise clients on legal transactions. May specialize in a single area or may practice broadly in many areas of law."
步骤2:文本词性与依存关系标注
使用udpipe包完成词性标注和依存句法分析,不需要额外配置外部环境:
- 安装并加载包,下载对应语言预训练模型:
install.packages("udpipe") library(udpipe) # 处理英文文本下载英文模型,处理中文替换为language = "chinese" model <- udpipe_download_model(language = "english") udmodel <- udpipe_load_model(file = model$file_model)
- 标注文本:
anno_result <- udpipe_annotate(udmodel, x = sample_text) anno_df <- as.data.frame(anno_result)
步骤3:匹配动词-名词对
核心逻辑是筛选依存关系为宾语(obj)的条目,匹配对应的核心动词和名词宾语,自动过滤其他无关词性:
# 提取宾语对应的动词索引 obj_df <- subset(anno_df, dep_rel == "obj", select = c("head_token", "token")) # 匹配动词的具体文本 verb_noun_pairs <- merge( obj_df, anno_df[, c("token_id", "token")], by.x = "head_token", by.y = "token_id", suffixes = c("_noun", "_verb") ) # 整理去重得到最终配对结果 final_pairs <- unique(verb_noun_pairs[, c("token_verb", "token_noun")]) colnames(final_pairs) <- c("动词", "名词")
你给出的示例文本运行后得到的结果如下:
Represent - clients
draw - documents
manage - clients
advise - clients
specialize - area
practice - areas
如果需要匹配draw up这类短语动词,可额外筛选dep_rel == "compound:prt"的条目,把助词合并到对应动词上即可。
步骤4:词频统计(可选)
如果需要统计动词-名词对的出现频次,运行以下代码即可:
pair_freq <- as.data.frame(table(final_pairs$动词, final_pairs$名词)) pair_freq <- pair_freq[pair_freq$Freq > 0, ]
内容的提问来源于stack exchange,提问作者waka
相关产品推荐
相关产品推荐

