68-R文本分析chinese.misc包介绍
1、函数概览
函数名称 | 功能 |
---|---|
scancn | 该函数读取文本文件并尝试检测文件编码 |
seg_file | 首先收集文件名或文本向量,然后调用jiebaR::segment分词 |
make_stoplist | 提供文件名时,该函数将返回术语向量。如果未提供任何内容,它将返回在jiebaR软件包中使用的停用词 |
match_pattern | 给定一个模式和一个字符向量,该函数将提取这些字符中与模式匹配的部分 |
slim_text | 停用词通常会从文本中删除。但是停用词列表不包含所有需要删除的词。因此,在删除停用词之前,我们可以通过标记来删除很多无关紧要的词并将文本设置为“slim” |
as.character2 | 将一个或多个对象强制转换为字符向量 |
as.numeric2 | 将对象强制转换为数值型向量 |
corp_or_dtm | 允许输入字符向量或文件和文件夹的混合物,它将自动检测文件编码,分割中文文本,进行指定的修改,删除停用词,然后生成语料库或dtm(tdm) |
word_cor | 给定DTM/TDM/矩阵,该函数计算单词对之间的pearson/spearman/kendall相关性,并通过p值和相关性最小值过滤值。它比tm::findAssocs灵活一些 |
create_ttm | 从DTM/TDM或代表二者之一的矩阵创建术语术语矩阵 |
csv2txt | 将给定的.csv文件中的文本写入添加了文件名的单独的.txt/.rtf文件中 |
txt2csv | 给定文件名,文件夹名称或两者的混合,该函数将读取.txt或其他分隔文件中的文本,然后将它们写入一个.csv文件中 |
dictionary_dtm | 几组单词的词典。有时我们想要的不是该单词或单个单词的词频,而是属于同一组的单词的总和。给定字典,此函数可以汇总所有单词组的频率,并且您无需手动进行操作 |
sparse_left | 这个函数并没有真正删除稀疏单词(tm::removeSparseTerms就是这样做的);相反,它仅显示指定一些稀疏值时还剩下多少个单词 |
dir_or_file | 输入可以是一个或多个目录,一个或多个文件或两者的混合。它将以递归的方式返回所有文件的完整路径,并以递增的顺序对其进行排序 |
get_tag_word | 给定一组中文文本,此功能可以提取某些指定类型的单词。例如,有时您想收集文本中使用的所有动词。函数使用jiebaR::tagging分割文本并进行pos-tagging。分配的类型并非全部正确。因此,您可以先用其他方法对文本进行pos-tag,然后再使用此功能 |
get_tmp_chi_locale | 不同操作系统上的R的本地设置或不同版本系统的本地设置会不一样。此程序包中的某些功能会尝试将R的语言环境设置转换为新值 |
is_character_vector | 检查对象是否为字符向量 |
is_positive_integer | 检查对象的所有元素是否都可以视为有效整数 |
m2doc | 给定一个DTM矩阵,此函数将每一行作为一个文件的术语频率,并将每一行重写为文本。如果您已经将文本转换为矩阵,则可以使用此功能将其转换为文本,语料库或再次创建DTM |
m3m | 三种类型的矩阵之间转换,分别是“matrix”,Matrix软件包中的“dgCMatrix”;软件包slam,tm中的“simple_triplet_matrix”,“DocumentTermMatrix”,“TermDocumentMatrix” |
output_dtm | 给定TDM或DTM对象,该函数将其转换为矩阵或将其写入附加了其他文件名的.csv文件 |
sort_tf | 输入矩阵或DTM或TDM,此函数对每个术语的总和进行计数并输出前n个术语 |
tf2doc | 此函数只是rep的包装,但允许使用不同的输入结构 |
topic_trend | 当给出主题名称和相应的年份时,此函数以lm为单位计算该时段内的上升和下降趋势 |
V | 以下这些函数使从类似Excel的文件中复制和粘贴数据变得容易,尤其是在有空白单元格或不同列的长度不同的情况下。当不复制行名或列名时使用V函数 |
VC | 当第一列用于行名且复制内容中没有列名时 |
VCR | 当存在行名又存在列名时 |
VR | 当有列名但行名不存在时 |
VRC | 当存在行名又存在列名时 |
2、as.character2
将一个或多个对象强制转换为字符向量。 与as.character不同,此功能可以处理数据框,列表和递归列表(列表列表),即使数据框和列表中有因子对象。 如果列表中有任何NULL对象,as.character2将把该元素强制转换为character(0)而不是字符“ NULL”,as.character就是这样做的。 当对象属于类矩阵或数据框时,该函数将按列打开它。 结果中的字符顺序设法与输入对象的顺序保持一致。
> library(pacman)
> p_load(chinese.misc)
>
> df <- data.frame(matrix(c(66, 77, NA, 99), nr = 2))
> l <- list(a = 1:4, b = factor(c(10, 20, NA, 30)), c = c("x", "y", NA, "z"), d = df)
> l2 <- list(l, l, cha = c("a", "b", "c"))
>
> as.character2(l2)
## [1] "1" "2" "3" "4" "10" "20" NA "30" "x" "y" NA "z" "66" "77" NA "99"
## [17] "1" "2" "3" "4" "10" "20" NA "30" "x" "y" NA "z" "66" "77" NA "99"
## [33] "a" "b" "c"
3、as.numeric2
将对象强制转换为数值型向量。此函数和as.numeric之间有一些区别。 首先,如果as.character2无法强制转换(通常是因为输入对象中包含字符),它将引发错误并停止而不是发出警告。其次,它可以处理数据框对象,列表和递归列表。 第三,它可以将类似数字的因子强制转换为你在屏幕上看到的内容。
> a <- c(55, 66, 77, 88, 66, 77, 88)
> b <- factor(a)
> df <- data.frame(a, b)
>
> as.numeric2(df, a * 2)
## [1] 55 66 77 88 66 77 88 55 66 77 88 66 77 88 110 132 154 176 132 154 176
> l <- list(a, a * 2)
> as.numeric2(l)
## [1] 55 66 77 88 66 77 88 110 132 154 176 132 154 176
> l2 <- list(l, l)
> as.numeric2(l2)
## [1] 55 66 77 88 66 77 88 110 132 154 176 132 154 176 55 66 77 88 66 77 88
## [22] 110 132 154 176 132 154 176
4、corp_or_dtm
允许输入字符向量或文件和文件夹的混合物,它将自动检测文件编码,分割中文文本,进行指定的修改,删除停用词,然后生成语料库或dtm(tdm)。 由于tm不能很好地支持中文,因此该功能可以解决一些问题。
> x <- c("Hello, what do you want to drink?", "drink a bottle of milk", "drink a cup of coffee",
+ "drink some water", "hello, drink a cup of coffee")
> dtm <- corp_or_dtm(x, from = "v", type = "dtm")
> dtm
## <<DocumentTermMatrix (documents: 5, terms: 15)>>
## Non-/sparse entries: 26/49
## Sparsity : 65%
## Maximal term length: 6
## Weighting : term frequency (tf)
> dtm2 <- corp_or_dtm(x, from = "v", type = "d", control = list(wordLengths = c(3, 20)))
> dtm2
## <<DocumentTermMatrix (documents: 5, terms: 11)>>
## Non-/sparse entries: 18/37
## Sparsity : 67%
## Maximal term length: 6
## Weighting : term frequency (tf)
> tdm <- corp_or_dtm(x, from = "v", type = "T", stop_word = c("you", "to", "a", "of"))
> tdm
## <<TermDocumentMatrix (terms: 11, documents: 5)>>
## Non-/sparse entries: 18/37
## Sparsity : 67%
## Maximal term length: 6
## Weighting : term frequency (tf)
corp_or_dtm(..., from = "dir", type = "corpus", enc = "auto", mycutter = DEFAULT_cutter, stop_word = NULL, stop_pattern = NULL, control = "auto", myfun1 = NULL, myfun2 = NULL, special = "", use_stri_replace_all = FALSE)
...
文件夹,文件或两种名称的混合。设置为“v”时,它也可以是要处理的文本的字符向量。
from
应该是“dir”或“v”。 如果输入是文件名,则应为“dir”(默认),如果输入是文本的字符向量,则应为“v”。但是,如果将其设置为“v”,请确保每个元素与您的工作目录中的文件名都不相同;如果它们相同,则该函数将引发错误。进行此检查是因为,如果它们相同,则jiebaR::segment将把输入作为要读取的文件!
type
想要的结果。它不区分大小写,因此以“c”或“C”开头的代表语料库结果;对于文档术语矩阵,以“d”或“D”开头;对于术语文档矩阵,以“t”或“T”开头。除上述以外的输入代表语料库结果。默认值为“corpus”。
enc
指定读取文件时的编码。如果您的文件可能具有不同的编码,或者您不知道它们的编码,请将其设置为“auto”(默认),以使该功能自动检测每个文件的编码。
mycutter
使用jiebar进行分词。这也是默认的分词器。
stop_word
一个字符向量,用于指定应删除的停用词。如果为NULL,则不会删除任何内容。 如果是“jiebar”,“jiebaR”或“auto”,则使用jiebaR使用的停用词。默认值为NULL。在删除停用词之前,文本会转换为小写,因此您的停用词只需要包含小写字符。
stop_pattern
停用词的正则表达式。与模式匹配的术语将被删除。注意:该函数将自动在模式中添加“^”和“$”,这意味着首先,您提供的模式不应包含这两个;第二,匹配是完全匹配。 也就是说,如果要删除一个单词,它不仅包含模式(由grepl检查),而且整个单词都与该模式匹配。
control
类似于DocumentTermMatrix或TermDocumentMatrix用于创建dtm或tdm时的控制项。但是有一些显着差异。在大多数情况下,您不需要设置此值,因为使用了默认值。当您将参数设置为NULL时,它仍指向此默认值。
myfun1
一个函数,用于在scancn读取之后和分词之前修改每个文本。
myfun2
一个函数,用于在分割每个文本后对其进行修改。
special
长度为1的字符或正则表达式将传递给dir_or_file,以指定文件名应满足的模式。 默认为读取所有文件。
use_stri_replace_all
默认值为FALSE。如果为TRUE,则使用stringi::stri_replace_all删除停用词,其速度稍快一些。
control中包括的参数:
wordlength:长度为2的正整数向量
dictionary:当您不希望使用完整单词时,指定将在DTM/TDM中出现的单词的字符vetcor。如果词典中的所有单词都没有出现在语料库中,则将创建一个空白的DTM/TDM。向量不应该包含NA,如果包含NA,将仅保留非NA元素。确保至少1个元素不是NA。 注意:如果字典和wordLengths都出现在您的control列表中,wordLengths将被忽略。
bounds:长度为2的整数向量,它限制词的词频。只有总频率在此范围内的单词才会出现在DTM/TDM中。0和inf不允许。需要设置一个更大的值表示无限的上限。
have:长度为2的整数向量,该向量限制单词在语料库中出现的边界值。假设一个单词在第一篇文章中出现3次,在第二篇文章中出现2次,在第三篇文章中出现0次,则其边界值=3 + 2 + 0 = 5; 但其值= 1 + 1 + 0 = 2。
weighting:计算单词权重的函数。默认值为计算词频TF。但是您可以使用其他加权函数,通常可用的有tm::weightBin或tm::weightTfIdf。
tokenizer:暂时不赞成使用,用户无法修改。
control中的设置选项:
DEFAULT_control1:将字长设置为1到25。
DEFAULT_control2:将字长设置为2到25。
5、create_ttm
从DTM/TDM或代表二者之一的矩阵创建术语术语矩阵的便捷功能。稀疏矩阵用于加速计算。输出可以是矩阵,也可以是稀疏矩阵。
create_ttm(x, type = "dtm", tomatrix = FALSE, checks = TRUE)
x
:DTM或TDM的对象,或以行名或列名作为术语的矩阵。
type
如果x是矩阵,此参数表明它是DTM或者TDM;对于前者,字符以“D/d”开头,对于后者,字符以“T/t”开头。
tomatrix
逻辑值,是否输出矩阵结果。如果为TRUE,则返回代表TTM的矩阵。如果为FALSE(默认),则返回一个列表:第一个元素是由Matrix包创建的稀疏矩阵,没有单词,第二个元素是这些单词的字符向量。
check
如果x为矩阵,是否检查其有效性,即是否为数值型,所有值均为0或正,没有NA。
> ttm <- create_ttm(dtm)
> ttm
## $value
## 15 x 15 sparse Matrix of class "dtCMatrix"
##
## [1,] . . . . . . . . . . . . . . .
## [2,] 1 . . . . . . . . . . . . . .
## [3,] 2 . . . . . . . . . . . . . .
## [4,] 2 . 2 . . . . . . . . . . . .
## [5,] . . . . . . . . . . . . . . .
## [6,] 3 1 2 2 1 . . . . . . . . . .
## [7,] 1 . 1 1 1 2 . . . . . . . . .
## [8,] 1 1 . . . 1 . . . . . . . . .
## [9,] 3 1 2 2 . 3 1 1 . . . . . . .
## [10,] . . . . . 1 . . . . . . . . .
## [11,] . . . . 1 1 1 . . . . . . . .
## [12,] . . . . 1 1 1 . . . 1 . . . .
## [13,] . . . . . 1 . . . 1 . . . . .
## [14,] . . . . 1 1 1 . . . 1 1 . . .
## [15,] . . . . 1 1 1 . . . 1 1 . 1 .
##
## $word
## [1] "a" "bottle" "coffee" "cup" "do" "drink" "hello" "milk" "of"
## [10] "some" "to" "want" "water" "what" "you"
> ttm2 <- create_ttm(dtm, tomatrix = T)
> ttm2
## a bottle coffee cup do drink hello milk of some to want water what you
## a 3 1 2 2 0 3 1 1 3 0 0 0 0 0 0
## bottle 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0
## coffee 2 0 2 2 0 2 1 0 2 0 0 0 0 0 0
## cup 2 0 2 2 0 2 1 0 2 0 0 0 0 0 0
## do 0 0 0 0 1 1 1 0 0 0 1 1 0 1 1
## drink 3 1 2 2 1 5 2 1 3 1 1 1 1 1 1
## hello 1 0 1 1 1 2 2 0 1 0 1 1 0 1 1
## milk 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0
## of 3 1 2 2 0 3 1 1 3 0 0 0 0 0 0
## some 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0
## to 0 0 0 0 1 1 1 0 0 0 1 1 0 1 1
## want 0 0 0 0 1 1 1 0 0 0 1 1 0 1 1
## water 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0
## what 0 0 0 0 1 1 1 0 0 0 1 1 0 1 1
## you 0 0 0 0 1 1 1 0 0 0 1 1 0 1 1
6、csv2txt
该函数将给定的.csv文件中的文本写入添加了文件名的单独的.txt/.rtf文件中。
csv2txt(csv, folder, which, header = TRUE, na_in_csv = c(NA, "", " ", "?", "NA", "999"), na_in_txt = " ", name_col = NULL, ext = "txt")
csv
.csv文件。其列之一包含要编写的文本。
folder
文件夹的名称,该文件夹存储由函数创建的.txt/.rtf文件。该文件夹可能已经存在。如果不存在,该函数将尝试递归创建它。如果无法创建,将引发错误。
which
:csv文件的哪一列包含文本。
header
.csv文件应以第一行作为表头读取吗?此参数传递给read.csv。默认值为TRUE。
na_in_csv
字符向量,指示应将.csv文件单元格中的哪些内容视为NA。默认值为“”,“ ”,“?”,“NA”,“999”;可以指定其他值。但是无论您指定什么,默认值将始终被视为NA。
na_in_txt
NA在txt文件中为长度为1的字符,默认值为“ ”(空格)。
name_col
长度为1的数字,指示应将数据的哪一列用作文件名。如果为NULL(默认值),则将为每个文件赋予唯一编号。如果一个单元格为NA,它将被转换为“”;如果太长,则仅使用前90个字符;一个或多个空格和标点符号将被替换为“ ”(空格)。
ext
要写入的文件扩展名。应该是“txt”,“rtf”或“”。如果不是三者之一,则设置为“”。
> # 创建两个csv文件
> x1 <- file.path(find.package("base"), "CITATION")
> x2 <- file.path(find.package("base"), "DESCRIPTION")
> txt2csv(x1, x2, must_txt = F, csv = "x1x2.csv")
>
> # 将csv转换为txt
> csv2txt(csv = "x1x2.csv", folder = "./", which = 3, ext = "txt")
7、dictionary_dtm
几组单词的词典。有时我们想要的不是该单词或单个单词的词频,而是属于同一组的单词的总和。给定字典,此函数可以汇总所有单词组的频率,并且您无需手动进行操作。
dictionary_dtm(x, dictionary, type = "dtm", simple_sum = FALSE, return_dictionary = FALSE, checks = TRUE)
x
由corp_or_dtm或tm::DocumentTermMatrix或tm::TermDocumentMatrix创建的DocumentTermMatrix或TermDocumentMatrix类的对象。也可以是一个数字矩阵。
dictionary
字典,告诉该函数如何对单词进行分组。它可以是列表,矩阵,data.frame或字符向量。
type
如果x是矩阵,则必须判断它是表示文档术语矩阵还是术语文档矩阵。以“D”或“d”开头的字符表示文档术语矩阵,以“T”或“t”开头的字符表示术语文档矩阵。默认值为“dtm”。
simple_sum
如果为FALSE(默认),则将返回DTM/TDM。如果为TRUE,您将看不到每个文本中每个单词的词频,而是返回一个数字向量,其每个元素代表整个语料库中相应单词组的总和。
return_dictionary
如果为TRUE,则返回修改后的字典,该字典仅包含DTM/TDM中确实存在的单词。默认值为FALSE。
check
默认值为TRUE。将检查x和字典是否有效。对于字典,如果输入的不是字符列表,则该函数将设法进行转换。除非您确实认为输入正确,否则不应将其设置为FALSE。
> # 不含缺失值的列表
> D1 <- list(aa <- c("drink", "eat"), bb <- c("cake", "pizza"), cc <- c("cup", "bottle"))
> # 包含缺失值的列表
> D2 <- list(has_na <- c("drink", "eat", NA), this_is_factor <- factor(c("cake", "pizza")),
+ this_is_duplicated <- c("cup", "bottle", "cup", "bottle"), do_not_exist <- c("tiger",
+ "dream"))
> # 含有缺失值的数据框
> D3 <- data.frame(aa <- c("drink", "eat", NA, NA), bb <- c("cake", "pizza", NA, NA), cc <- c("cup",
+ "bottle", NA, NA), dd <- c("do", "to", "of", "and"))
>
> y1 <- dictionary_dtm(dtm, D1, return_dictionary = T)
> y1
## $freq
## <<DocumentTermMatrix (documents: 5, terms: 3)>>
## Non-/sparse entries: 8/7
## Sparsity : 47%
## Maximal term length: 6
## Weighting : term frequency (tf)
##
## $used_dictionary
## $used_dictionary$group1
## [1] "drink"
##
## $used_dictionary$group2
## character(0)
##
## $used_dictionary$group3
## [1] "cup" "bottle"
> y2 <- dictionary_dtm(dtm, D2, return_dictionary = T)
> y2
## $freq
## <<DocumentTermMatrix (documents: 5, terms: 4)>>
## Non-/sparse entries: 8/12
## Sparsity : 60%
## Maximal term length: 6
## Weighting : term frequency (tf)
##
## $used_dictionary
## $used_dictionary$group1
## [1] "drink"
##
## $used_dictionary$group2
## character(0)
##
## $used_dictionary$group3
## [1] "cup" "bottle"
##
## $used_dictionary$group4
## character(0)
> y3 <- dictionary_dtm(dtm, D3, simple_sum = T)
> y3
## group1 group2 group3 group4
## 0 0 0 0
> # 如果输入为矩阵
> mt <- as.matrix(dtm, bynow = T)
> head(mt)
## Terms
## Docs a bottle coffee cup do drink hello milk of some to want water what you
## 1 0 0 0 0 1 1 1 0 0 0 1 1 0 1 1
## 2 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0
## 3 1 0 1 1 0 1 0 0 1 0 0 0 0 0 0
## 4 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0
## 5 1 0 1 1 0 1 1 0 1 0 0 0 0 0 0
> y4 <- dictionary_dtm(mt, D3, type = "t", return_dictionary = T)
> y4
## $freq
## <<TermDocumentMatrix (terms: 4, documents: 15)>>
## Non-/sparse entries: 48/12
## Sparsity : 20%
## Maximal term length: 6
## Weighting : term frequency (tf)
##
## $used_dictionary
## $used_dictionary$group1
## [1] "1" "2"
##
## $used_dictionary$group2
## [1] "1" "2"
##
## $used_dictionary$group3
## [1] "2" "1"
##
## $used_dictionary$group4
## [1] "2" "4" "3" "1"
8、dir_or_file
输入可以是一个或多个目录,一个或多个文件或两者的混合。它将以递归的方式返回所有文件的完整路径,并以递增的顺序对其进行排序。
> x3 <- find.package("base")
> x4 <- find.package("utils")
> all_file <- dir_or_file(x3, x4, special = "rds$")
> all_file
## [1] "C:/Program Files/R/R-3.6.3/library/base/help/aliases.rds"
## [2] "C:/Program Files/R/R-3.6.3/library/base/help/paths.rds"
## [3] "C:/Program Files/R/R-3.6.3/library/base/Meta/demo.rds"
## [4] "C:/Program Files/R/R-3.6.3/library/base/Meta/features.rds"
## [5] "C:/Program Files/R/R-3.6.3/library/base/Meta/hsearch.rds"
## [6] "C:/Program Files/R/R-3.6.3/library/base/Meta/links.rds"
## [7] "C:/Program Files/R/R-3.6.3/library/base/Meta/package.rds"
## [8] "C:/Program Files/R/R-3.6.3/library/base/Meta/Rd.rds"
## [9] "C:/Program Files/R/R-3.6.3/library/utils/help/aliases.rds"
## [10] "C:/Program Files/R/R-3.6.3/library/utils/help/paths.rds"
## [11] "C:/Program Files/R/R-3.6.3/library/utils/Meta/features.rds"
## [12] "C:/Program Files/R/R-3.6.3/library/utils/Meta/hsearch.rds"
## [13] "C:/Program Files/R/R-3.6.3/library/utils/Meta/links.rds"
## [14] "C:/Program Files/R/R-3.6.3/library/utils/Meta/nsInfo.rds"
## [15] "C:/Program Files/R/R-3.6.3/library/utils/Meta/package.rds"
## [16] "C:/Program Files/R/R-3.6.3/library/utils/Meta/Rd.rds"
## [17] "C:/Program Files/R/R-3.6.3/library/utils/Meta/vignette.rds"
9、get_tag_word
给定一组中文文本,此功能可以提取某些指定类型的单词。例如,有时您想收集文本中使用的所有动词。函数使用jiebaR::tagging分割文本并进行pos-tagging。分配的类型并非全部正确。因此,您可以先用其他方法对文本进行pos-tag,然后再使用此功能。
get_tag_word(x,tag= NULL,tag_pattern= NULL,mycutter = DEFAULT_cutter,type=“ word”,each= TRUE,only_unique = FALSE,keep_name = FALSE,checks= TRUE)
x
必须是字符向量列表,即使该列表仅包含一个元素也是如此,但它不应包含NA。
tag
指定的一个或多个标签。将选择带有这些标签的单词。可能的标签有“v”,“n”,“vn”等。
tag_pattern
应该是长度为1的正则表达式。可以通过此模式指定标签,而不是直接提供标签名称。例如,您可以通过tag_pattern =“^n”指定以“n”开头的标签名称。 tag和tag_pattern至少应至少一个不为NULL。
mycutter
一种由jiebaR软件包创建的分词器,由用户提供以标记文本。如果文本已被标记,则可以将其设置为NULL。 默认情况下,使用DEFAULT_cutter。
type
如果是“单词”(默认),然后提取与标签匹配的单词。 如果是“position”,则仅返回单词的位置。注意:如果是“positions”,则each参数将始终设置为TRUE。
each
如果为TRUE(默认),则返回将是一个列表,其中的每个元素都是文本的提取结果。 如果为FALSE,则返回为包含提取单词的字符向量。
only_unique
如果为TRUE,则仅返回唯一单词。默认值为FALSE。
keep_name
是否保留提取单词的标签名称。默认值为FALSE。注意:如果only_unique = TRUE,则将删除所有标签名称。
checks
是否检查参数的正确性。默认值为TRUE。
> x5 <- c(v = "drink", xdrink = "coffee", v = "drink", xdrink = "cola", v = "eat", xfood = "banana")
> x5
## v xdrink v xdrink v xfood
## "drink" "coffee" "drink" "cola" "eat" "banana"
> x6 <- c(v = "drink", xdrink = "茶", v = "购买", x = "计算机")
> x6
## v xdrink v x
## "drink" "茶" "购买" "计算机"
> x7 <- list(x5, x6)
> x7
## [[1]]
## v xdrink v xdrink v xfood
## "drink" "coffee" "drink" "cola" "eat" "banana"
##
## [[2]]
## v xdrink v x
## "drink" "茶" "购买" "计算机"
> get_tag_word(x7, tag = "v", mycutter = NULL)
## [[1]]
## [1] "drink" "drink" "eat"
##
## [[2]]
## [1] "drink" "购买"
> get_tag_word(x7, tag = "v", mycutter = NULL, only_unique = T)
## [[1]]
## [1] "drink" "eat"
##
## [[2]]
## [1] "drink" "购买"
> get_tag_word(x7, tag_pattern = "^x", mycutter = NULL)
## [[1]]
## [1] "coffee" "cola" "banana"
##
## [[2]]
## [1] "茶" "计算机"
> get_tag_word(x7, tag = "v", mycutter = NULL, type = "position")
## [[1]]
## [1] 1 3 5
##
## [[2]]
## [1] 1 3
10、get_tmp_chi_locale
不同操作系统上的R的本地设置或不同版本系统的本地设置会不一样。此程序包中的某些功能会尝试将R的语言环境设置转换为新值。默认情况下,新值在Windows中为“Chinese(Simplified)_China.936”,在其他系统中为“zh_CN.UTF-8”。但是用户可以通过options(tmp_chi_locale =“ ...”)进行修改,然后通过get_tmp_chi_locale()进行检查。 注意:如果此值为NULL或NA,则表示此程序包中的函数不会进行语言环境修改。 如果此值为“auto”,它将自动转换为默认值。
11、is_character_vector
此函数检查对象是否为字符向量。它被设计为具有不同于is.character的作用,因此有时更方便。
> is.character(0)
## [1] FALSE
> is_character_vector(character(0))
## [1] FALSE
> is.character(as.character(NA))
## [1] TRUE
> is_character_vector(as.character(NA))
## [1] FALSE
> is_character_vector(x7)
## [1] FALSE
> is_character_vector(c("a", "b", "c", "d"), len = c(1:10))
## [1] TRUE
12、is_positive_integer
此函数检查对象的所有元素是否都可以视为有效整数。
> is_positive_integer(NULL)
## [1] FALSE
> is_positive_integer(as.integer(NA))
## [1] FALSE
> is_positive_integer(3.3)
## [1] FALSE
> is_positive_integer(3)
## [1] TRUE
13、m2doc
给定一个表示文档术语矩阵的矩阵,此函数将每一行作为一个文件的术语频率,并将每一行重写为文本。如果您已经将文本转换为矩阵,则可以使用此功能将其转换为文本,语料库或再次创建文档术语矩阵。
> s <- sample(1:5, 20, replace = T)
> m <- matrix(s, nrow = 5)
> colnames(m) <- c("r", "text", "mining", "data")
> m
## r text mining data
## [1,] 3 1 4 1
## [2,] 1 5 4 1
## [3,] 2 3 5 3
## [4,] 5 1 2 1
## [5,] 1 4 4 4
> m2doc(m)
## [1] "r r r text mining mining mining mining data"
## [2] "r text text text text text mining mining mining mining data"
## [3] "r r text text text mining mining mining mining mining data data data"
## [4] "r r r r r text mining mining data"
## [5] "r text text text text mining mining mining mining data data data data"
14、m3m
三种类型的矩阵之间转换,分别是“matrix”,Matrix软件包中的“dgCMatrix”;软件包slam,tm中的“simple_triplet_matrix”,“DocumentTermMatrix”,“TermDocumentMatrix”。 当您读取一个csv文件并希望它为dtm时,将使用此功能。或者,当您拥有非常大的dtm并希望将其保存或传递给另一个处理dgCMatrix对象的函数时。 注意,它不能在一侧的simple_triplet_matrix与另一侧的dtm或tdm之间转换。
m3m(x,to,keep_name = TRUE)
x
类矩阵,dgCMatrix,simple_triplet_matrix,DocumentTermMatrix,TermDocumentMatrix的对象。
to
您想将x转换为哪个类。可以使用缩写:“matrix”和“m”表示“matrix”,“dgCMatrix”和“M”表示“dgCMatrix”;“simple_triplet_matrix”和“stm”表示“simple_triplet_matrix”;“DocumentTermMatrix”,“dtm”,“DTM”表示“DocumentTermMatrix”;“TermDocumentMatrix”,“tdm”,“TDM”表示“TermDocumentMatrix”。
keep_name
是否保留名称或名称,对于类似dtm的对象,文档和术语。默认为TRUE。如果将其设置为FALSE,则会丢失它们。 但是,如果将dgCMatrix转换为dtm或tdm,则要求dgCMatrix对象具有长度为2的列表作为dimnames。
> class(dtm)
## [1] "DocumentTermMatrix" "simple_triplet_matrix"
> dtm_converse <- m3m(dtm, "M")
> class(dtm_converse)
## [1] "dgCMatrix"
## attr(,"package")
## [1] "Matrix"
15、make_stoplist
提供文件名时,该函数将返回术语向量。如果未提供任何内容,它将返回在jiebaR软件包中使用的停用词。
> make_stoplist(x = "jiebar", print = T)
## Show the first 5 stop words:
## 的
## 了
## 一
## 一些
## 一何
## [1] "的" "了" "一" "一些" "一何" "一切" "一则"
## [8] "一方面" "一旦" "一来" "一样" "一般" "一转眼" "万一"
## [15] "上" "上下" "下" "不" "不仅" "不但" "不光"
## [22] "不单" "不只" "不外乎" "不如" "不妨" "不尽" "不尽然"
## ---------------------------------------------------------------------------------
## [701] "鉴于" "针对" "阿" "除" "除了" "除外" "除开"
## [708] "除此之外" "除非" "随" "随后" "随时" "随着" "难道说"
## [715] "非但" "非徒" "非特" "非独" "靠" "顺" "顺着"
## [722] "首先"
16、match_pattern
给定一个模式和一个字符向量,该函数将提取这些字符中与模式匹配的部分。
> p <- "x.*?y"
> x8 <- c("x6yx8y", "x10yx30y", "aaaaa", NA, "x00y")
>
> y8 <- match_pattern(p, x8)
> y8
## [1] "x6y" "x8y" "x10y" "x30y" "x00y"
> y9 <- match_pattern(p, x8, vec_result = F)
> y9
## [[1]]
## [1] "x6y" "x8y"
##
## [[2]]
## [1] "x10y" "x30y"
##
## [[3]]
## character(0)
##
## [[4]]
## character(0)
##
## [[5]]
## [1] "x00y"
17、output_dtm
给定TermDocumentMatrix或DocumentTermMatrix对象,该函数将其转换为矩阵或将其写入附加了其他文件名的.csv文件。
> output_dtm(dtm, doc_name = paste0("doc", 1:5), outputfile = "dtm.csv")
18、scancn
该函数读取文本文件并尝试检测文件编码。 如果您有来自不同来源的中文文件,并且无法给它们提供单一编码,只需让此功能检测并读取它们即可。该函数可以为您处理无法识别的字符节省大量时间。
> x1
## [1] "C:/PROGRA~1/R/R-3.6.3/library/base/CITATION"
> scancn(x1)
## [1] "bibentry(\"Manual\", title = \"R: A Language and Environment for Statistical Computing\", author = person(\"R Core Team\"), organization = \"R Foundation for Statistical Computing\", address = \"Vienna, Austria\", year = version$year, url = \"https://www.R-project.org/\", textVersion = paste(\"R Core Team (\", version$year, \"). \", \"R: A language and environment for statistical computing. \", \"R Foundation for Statistical Computing, Vienna, Austria. \", \"URL https://www.R-project.org/.\", sep=\"\"), \t mheader = \"To cite R in publications use:\", \t \t mfooter = paste(\"We have invested a lot of time and effort in creating R,\", \"please cite it when using it for data analysis.\", \t \"See also\", sQuote(\"citation(\"pkgname\")\"), \t \"for citing R packages.\", sep = \" \") \t)"
19、seg_file
该函数首先收集文件名或文本向量,然后调用jiebaR::segment分词。在此过程中,它允许用户进行其他修改。自动检测文件编码。分割后,属于文本的分割词将被粘贴到单个字符中,单词之间用“ ”分隔。分割的结果将被返回或写入磁盘。
seg_file(...,from =“dir”,folder= NULL,mycutter = DEFAULT_cutter,enc =“auto”,myfun1 = NULL,myfun2 = NULL,special=“”,ext =“txt”)
...
文件夹,文件或两种名称的混合。设置为“v”时,它也可以是要处理的文本的字符向量。
from
只能是“dir”或“v”。如果输入是文件名,则应为“dir”(默认),如果输入是文本的字符向量,则应为“v”。但是,如果将其设置为“v”,请确保向量的每个元素与您的工作目录中的文件名都不相同;如果它们相同,将引发错误。进行此检查的原因是,如果它们相同,则函数会将输入作为文件读取!
folder
长度为1个字符,指示要放置分段文本的文件夹。如果希望结果为字符向量而不是写入磁盘,则将其设置为NULL。否则,它应该是有效的目录路径,每个分段的文本都将写入.txt/.rtf文件。如果指定的文件夹不存在,该函数将尝试创建它。
mycutter
jiebar分词器分割文本。
enc
用于读取文件的文件编码。如果文件具有不同的编码,或者您不知道它们的编码,请将其设置为“auto”(默认)以自动检测编码。
myfun1
一个函数,用于在scancn读取之后和分词之前修改每个文本。
myfun2
一个函数,用于在分词后对其进行修改。
special
长度为1的字符或正则表达式将传递给dir_or_file,以指定文件名应满足的模式。默认为读取所有文件。
ext
文件的扩展名。应该是“txt”,“rtf”或“”。如果不是三个之一,则设置为“”。仅当您的输入是文本向量而不是文件名并且您想要将结果写入磁盘时才使用此选项。
> x9 <- "我们的祖国多么强大!"
> seg_file(x9, from = "v", myfun1 = tolower)
## [1] "我们 的 祖国 多么 强大"
20、slim_text
停用词通常会从文本中删除。但是停用词列表不包含所有需要删除的词。因此,在删除停用词之前,我们可以通过标记来删除很多无关紧要的词并将文本设置为“slim”。
该函数调用jiebaR::tagging对中文文本进行语音标记,然后删除具有某些标记的单词。
http://www.docin.com/p-341417726.html?_t_t_t=0.3930890985844252 提供有关中文词性标注的细节,只有带有以下这些标签的词会被保留:
•(1)“n”:名词;
•(2)“t”:与时间有关的单词;
•(3)“s”:与空间有关的词;
•(4)“v”:动词;
•(5)“a”:形容词;
•(6)“b”:仅用作中文属性的单词;
•(7)“x”:字符串;
•(8)“j”,“l”,“i”,“z”:一些特定的中文字母和短语; •(9)“unknown”:未知类型的单词;
•(10)“eng”:英语单词。
> x10 <- "we have new words:aaa,bbb,ccc,G20."
> slim_text(x10)
## [1] "we have new words aaa bbb ccc G20"
> slim_text(x10, rm_eng = T)
## [1] ""
> slim_text(x10, rm_eng = F, rm_alpha = T)
## [1] "G20"
21、sort_tf
输入矩阵或DTM或TDM,此函数对每个术语的总和进行计数并输出前n个术语。结果可以在屏幕上显示,以便您可以将它们手动复制到其他位置(例如Excel)。
> dtm
## <<DocumentTermMatrix (documents: 5, terms: 15)>>
## Non-/sparse entries: 26/49
## Sparsity : 65%
## Maximal term length: 6
## Weighting : term frequency (tf)
> 20sort_tf(dtm, top = 3)
## drink&5
## a&3
## of&3
> sort_tf(dtm, top = 3, must_exact = T)
## drink&5
## a&3
## of&3
22、sparse_left
这个函数并没有真正删除稀疏单词(tm::removeSparseTerms就是这样做的);相反,它仅显示指定一些稀疏值时还剩下多少个单词。
> sparse_left(dtm, sparse = seq(0, 1, 0.1))
## 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
## 0 1 1 1 1 3 6 6 15 15 15
23、tf2doc
此函数只是rep的包装,但允许使用不同的输入结构。要同时重写更多文本,请参阅m2doc。
> x11 <- matrix(c("coffee", "milk", "tea", "cola"), nrow = 2)
> x11
## [,1] [,2]
## [1,] "coffee" "tea"
## [2,] "milk" "cola"
> y11 <- factor(c(5:8))
> y11
## [1] 5 6 7 8
## Levels: 5 6 7 8
> tf2doc(x11, y11)
## [1] "coffee milk milk tea tea tea cola cola cola cola"
24、topic_trend
当给出主题名称和相应的年份时,此函数以lm为单位计算该时段内的上升和下降趋势。
> set.seed(123)
> topic <- sample(c("art", "economy", "law", "politice", "sociology"), 50, replace = T)
>
> set.seed(123)
> year <- sample(2011:2016, 50, replace = T)
>
> tr1 <- topic_trend(year, topic)
> tr1
## $trend
## trendIndex trendLevel totalTrend maxminYear detailTrend simpleTrend
## art -0.4000 0.3739 fall 2016 fall along fall
## economy -0.1429 0.3262 fall 2016 fall along fall
## law -0.2286 0.1404 fall 2015 fall and rise fall
## politice -0.0571 0.8541 fall 2016 fall along equal
## sociology 0.4857 0.1343 rise 2016 rise along rise
##
## $absoluteFreq
## topic
## year art economy law politice sociology
## 2011 2 2 3 0 2
## 2012 3 1 2 2 0
## 2013 4 2 2 2 1
## 2014 0 2 2 0 2
## 2015 3 1 1 2 2
## 2016 0 1 2 0 4
> tr2 <- topic_trend(year, topic, zero = NA)
> tr2
## $trend
## trendIndex trendLevel totalTrend maxminYear detailTrend simpleTrend
## art 0.2286 0.5219 rise 2013 rise and fall rise
## economy -0.1429 0.3262 fall 2016 fall along fall
## law -0.2286 0.1404 fall 2015 fall and rise fall
## politice 0.0000 -999.0000 almost same -999 almost same equal
## sociology 0.3514 0.2676 rise 2016 rise along rise
##
## $absoluteFreq
## topic
## year art economy law politice sociology
## 2011 2 2 3 2
## 2012 3 1 2 2
## 2013 4 2 2 2 1
## 2014 2 2 2
## 2015 3 1 1 2 2
## 2016 1 2 4
> tr3 <- topic_trend(year, topic, relative = T)
> tr3
## $trend
## trendIndex trendLevel totalTrend maxminYear detailTrend simpleTrend
## art -0.0457 0.3273 fall 2016 fall along fall
## economy -0.0082 0.7251 fall 2015 fall and rise fall
## law -0.0144 0.5578 fall 2015 fall and rise fall
## politice -0.0076 0.8256 fall 2016 fall along equal
## sociology 0.0759 0.1129 rise 2016 rise along rise
##
## $absoluteFreq
## topic
## year art economy law politice sociology
## 2011 2 2 3 0 2
## 2012 3 1 2 2 0
## 2013 4 2 2 2 1
## 2014 0 2 2 0 2
## 2015 3 1 1 2 2
## 2016 0 1 2 0 4
##
## $relativeFreq
## topic
## year art economy law politice sociology
## 2011 0.22222 0.22222 0.33333 0.00000 0.22222
## 2012 0.37500 0.12500 0.25000 0.25000 0.00000
## 2013 0.36364 0.18182 0.18182 0.18182 0.09091
## 2014 0.00000 0.33333 0.33333 0.00000 0.33333
## 2015 0.33333 0.11111 0.11111 0.22222 0.22222
## 2016 0.00000 0.14286 0.28571 0.00000 0.57143
25、txt2csv
给定文件名,文件夹名称或两者的混合,该函数将读取.txt或其他分隔文件中的文本,然后将它们写入一个.csv文件中。它可以帮助那些喜欢以表格格式显示文本的人。
> x1
## [1] "C:/PROGRA~1/R/R-3.6.3/library/base/CITATION"
> x2
## [1] "C:/PROGRA~1/R/R-3.6.3/library/base/DESCRIPTION"
> txt2csv(x1, x2, must_txt = F, csv = "x1x2.csv")
26、V/VR/VC/VRC/VCR
以下这些函数使从类似Excel的文件中复制和粘贴数据变得容易,尤其是在有空白单元格或不同列的长度不同的情况下。他们都有相同的参数。
•V,当不复制行名或列名时
•VR,当第一列用于行名且复制内容中没有列名时
•VC,当有列名但行名不存在时
•VRC、VCR,当存在行名又存在列名时。
如果您从文本文档(例如Windows记事本)中复制内容,则该函数可能会警告"incomplete final line found by readTableHeader..."这是因为您的内容没有以行尾符号结尾。您可以简单地忽略此警告!
> # 正整数代表TRUE,0表示FALSE
> V(tofactor = 0, keepblank = 0, sep = "\t")
## V1
## 1 但是在这个数据集中,每个观测值均有犯罪率和年份两个属性,也就是为面板数据的形式。好在对于87年的数据,已经给出对应82年的犯罪率
## 2 lcrmrte.1 ,故选取87年数据直接回归即可。
27、word_cor
给定DTM/TDM/矩阵,该函数计算单词对之间的pearson/spearman/kendall相关性,并通过p值和相关性最小值过滤值。它比tm::findAssocs()灵活一些。
> set.seed(123)
> s2 <- sample(1:10,100,replace = T)
> m <- matrix(s2,nrow = 20)
>
> mywords <- c("alpha","apple","cake","data","r")
> colnames(m) <- mywords
>
> mycor <- word_cor(m,mywords,
+ # pearson,spearman,kendall(default)
+ method = "pearson",
+ # 相关性<0.1将被转换为NA
+ min=0.1,
+ # p值>=0.4将被转换为NA
+ p=0.4)
> mycor
## $corMatrix
## alpha apple cake data r
## alpha NA NA NA -0.4459 0.3302
## apple NA NA NA NA NA
## cake NA NA NA 0.2475 NA
## data -0.4459 NA 0.2475 NA -0.2746
## r 0.3302 NA NA -0.2746 NA
##
## $pMatrix
## alpha apple cake data r
## alpha NA 0.8015 0.4470 0.0488 0.1551
## apple 0.8015 NA 0.5427 0.8385 0.4618
## cake 0.4470 0.5427 NA 0.2927 0.8112
## data 0.0488 0.8385 0.2927 NA 0.2413
## r 0.1551 0.4618 0.8112 0.2413 NA