R语言文本挖掘:生成PDF词频表时如何处理残缺及无意义词汇
解决西班牙语PDF高频词表生成时的字符残缺/怪异问题
嘿,我之前处理西语PDF文本提取时也踩过类似的坑!大概率是字符编码不匹配、PDF字体嵌入不全或者换行断词没处理导致的,咱们一步步来搞定:
常见原因分析
- 西语有大量特殊字符(ñ、áéíóú等),提取时编码没设对直接会乱码
- 很多PDF用了非标准字体或者没完全嵌入字体,导致
pdftools提取字符时识别错误 - 西语单词换行时常用连字符拆分(比如
información拆成informació-+n),没合并的话就会出现残缺词汇
具体解决方案
1. 优化pdftools的文本提取参数
先试试给pdf_text指定正确的编码,西语常用UTF-8或ISO-8859-1,同时处理换行断词:
library(pdftools) library(stringr) library(stringi) # 替换成你的PDF路径 pdf_path <- "your_file.pdf" # 提取文本并做初步清洗 raw_text <- pdf_text(pdf_path) cleaned_text <- raw_text %>% # 去掉换行前的连字符,合并拆分的单词 str_replace_all("-\\n", "") %>% # 将所有换行替换为空格,合并成连续文本 str_replace_all("\\n", " ") %>% # 强制设置为UTF-8编码,避免乱码 stringi::stri_enc_set("UTF-8")
2. 用OCR处理字体异常的PDF
如果上面的方法还是不行,说明你的PDF可能是扫描版或者字体嵌入有问题,这时候用tesseract做光学字符识别(OCR)就靠谱多了:
library(tesseract) # 第一次使用需要下载西语语言包,取消注释运行 # tesseract_download("spa") # 用OCR提取西语文本 ocr_text <- pdf_ocr_text(pdf_path, language = "spa") # 同样处理断词和换行 cleaned_text <- ocr_text %>% str_replace_all("-\\n", "") %>% str_replace_all("\\n", " ")
3. 生成高频词表时用西语停用词
别忘记替换成西语的停用词!否则会把el、la、que这些常用词当成高频词,影响结果:
library(tidytext) library(stopwords) # 生成西语停用词表 spanish_stopwords <- tibble(word = stopwords("es")) # 生成清洗后的高频词表 tidy_words <- tibble(text = cleaned_text) %>% unnest_tokens(word, text) %>% # 只保留西语词汇(过滤数字、符号) filter(str_detect(word, "[a-záéíóúñ]")) %>% # 去掉西语停用词 anti_join(spanish_stopwords) %>% count(word, sort = TRUE)
4. 特殊字符的额外处理
如果还有怪异字符,试试用stringi做字符转换:
# 把特殊字符转成ASCII兼容形式(可选,比如把ñ转成n) cleaned_text <- stringi::stri_trans_general(cleaned_text, "Latin-ASCII")
按照这个流程走,应该就能解决你遇到的词汇残缺或怪异的问题啦!
内容的提问来源于stack exchange,提问作者Alejandro Carrera
相关产品推荐
相关产品推荐

