获取R中doc/docx文件的字数



我有一个doc/docx文档流,需要获取其字数。

到目前为止,程序是手动打开文档并记下MS word本身提供的字数,我正在尝试使用R.实现自动化

这就是我尝试的:

library(textreadr)
library(stringr)
myDocx = read_docx(myDocxFile)
docText = str_c(myDocx , collapse = " ")
wordCount = str_count(test, "\s+") + 1

不幸的是,wordCount并不是MS Word所建议的。

例如,我注意到MS Word统计编号列表中的数字,而textreadr甚至不导入它们。

有变通办法吗?我也不介意在Python中尝试一些东西,尽管我在那里的经验较少。

如有任何帮助,我们将不胜感激。

这应该可以使用R.中的tidytext包来完成

library(textreadr)
library(tidytext)
library(dplyr)
#read in word file without password protection
x <- read_docx(myDocxFile)
#convert string to dataframe
text_df <-tibble(line = 1:length(x),text = x)
#tokenize dataframe to isolate separate words
words_df <- text_df %>%
unnest_tokens(word,text)
#calculate number of words in passage
word_count <- nrow(words_df)

我尝试用另一个库(officer(读取docx文件,尽管它不是100%一致,但这次做得更好。

另一个小的解决方案是复制MS Word关于什么是Word和什么不是Word的策略。计数所有空间的天真方法可以通过忽略"零"来改进;英文短划线";(U+2013(字符。

这是我改进的功能:

getDocxWordCount = function(docxFile) {
docxObject = officer::read_docx(docxFile)
myFixedText = as.data.table(officer::docx_summary(docxObject))[nchar(str_trim(text)) > 1, str_trim(text)]
wordBd = sapply(as.list(myFixedText), function(z) 1 + str_count(z, "\s+([u{2013}]\s+)?"))
return(sum(wordBd))
}

这仍然有一个弱点,阻碍了100%的准确性:officer库不读取列表分隔符(如项目符号或连字符(,但MS Word将这些分隔符视为单词。因此,在任何列表中,此函数当前都会返回X个单词,其中X是列出的项目数。我还没有对docxObject的属性进行过多的实验,但如果它以某种方式保持了列出的项目的数量,那么可以进行一定的改进。

这里有另一种可以考虑的方法:

library(RDCOMClient)
wordApp <- COMCreate("Word.Application")
wordApp[["Visible"]] <- TRUE
wordApp[["DisplayAlerts"]] <- FALSE
path_To_Word_File <- "D:\text.docx"
doc <- wordApp[["Documents"]]$Open(normalizePath(path_To_Word_File), ConfirmConversions = FALSE)
doc$Words()$Count()

最新更新