3 分词

3.0.1 对文本分词

分词器 = worker() 
segment("这是一段测试文本!", 分词器)
#> [1] "这是" "一段" "测试" "文本"

3.0.2 分行输出 $bylines

分词器 = worker() 
分词器$bylines = TRUE

segment(c("这是第一行文本。","这是第二行文本。"), 分词器)
#> [[1]]
#> [1] "这是"   "第一行" "文本"  
#> 
#> [[2]]
#> [1] "这是"   "第二行" "文本"

在新建 worker 时设置 bylines

分词器 = worker(bylines = TRUE) 

segment(c("这是第一行文本。","这是第二行文本。"), 分词器)
#> [[1]]
#> [1] "这是"   "第一行" "文本"  
#> 
#> [[2]]
#> [1] "这是"   "第二行" "文本"

下面是不分行输出的结果

分词器 = worker() 

segment(c("这是第一行文本。","这是第二行文本。"), 分词器)
#> [1] "这是"   "第一行" "文本"   "这是"   "第二行" "文本"

3.0.3 保留符号 $symbol

分词器 = worker() 
分词器$symbol = TRUE

segment(c("Hi,这是第一行文本。"), 分词器)
#> [1] "Hi"     ","     "这是"   "第一行" "文本"   "。"

重设为不保留符号

分词器$symbol = FALSE 
segment(c("Hi,这是第一行文本。"), 分词器)
#> [1] "Hi"     "这是"   "第一行" "文本"

在新建 worker 时设置 symbol

分词器 = worker(symbol = TRUE)
segment(c("Hi,这是第一行文本。"), 分词器)
#> [1] "Hi"     ","     "这是"   "第一行" "文本"   "。"
segment(c("。,。;las"), 分词器)
#> [1] "。"  ","  "。"  ";"  "las"

分词器 = worker(symbol = FALSE)
segment(c("Hi,这是第一行文本。"), 分词器)
#> [1] "Hi"     "这是"   "第一行" "文本"
segment(c("。,。;las"), 分词器)
#> [1] "las"

3.0.4 添加新词到已经新建的分词器中 new_user_word()

分词器 = worker()
segment("这是一个新词", 分词器)
#> [1] "这是" "一个" "新词"

# 第三个参数 "n" 代表新词的词性标记
new_user_word(分词器, "这是一个新词", "n") 
#> [1] TRUE
segment("这是一个新词", 分词器)
#> [1] "这是一个新词"

3.0.5 添加停止词 worker(stop_word = “…”)

!!!! 对于分词,请不要修改默认加载的停止词文本,即 jiebaR::STOPPATH,请使用自定义的停止词路径。

目录下有一个 stop.txt 文件,内容如下

readLines("stop.txt")
#> [1] "停止"
分词器  = worker(stop_word = "stop.txt")
segment("这是一个停止词", 分词器)
#> [1] "这是" "一个" "词"

3.0.6 对文件进行分词 - 使用 readLines 和 writeLines

使用 readLines 函数读取对应文本,

texts = readLines("./index.rmd", encoding="UTF-8")
分词器$bylines = TRUE
分词结果 = segment(texts, 分词器)

使用 writeLines 写入文件

合并各行分词结果 =sapply(分词结果, function(x){ paste(x, collapse = " ")})
writeLines(合并各行分词结果, "./某个文件.txt")
file.remove("./某个文件.txt")
#> [1] TRUE

!!!!!乱码预警

Windows 下 writeLines 保存的文本可能会为乱码,

对应的解决方案为 writeBin + charToRaw

writeBin(charToRaw("对应文本还有一个换行符\n"), "./某个文件.txt")

3.0.7 对文件进行分词 - 自动检测路径

当前目录下又一个 index.rmd 的文件

outputfile = segment("./index.rmd", 分词器)
readLines(outputfile, 5)
#> [1] ""                              "title jiebaR 中文 分词 文档"  
#> [3] "knit bookdown render book"     "date r paste 更新 于 Sys Date"
#> [5] "documentclass book"
file.remove(outputfile)
#> [1] TRUE

指定输出路径

分词器$output = "某个文件"
segment("./index.rmd", 分词器)
#> [1] "某个文件"
readLines("某个文件", 5)
#> [1] ""                              "title jiebaR 中文 分词 文档"  
#> [3] "knit bookdown render book"     "date r paste 更新 于 Sys Date"
#> [5] "documentclass book"
file.remove("某个文件")
#> [1] TRUE

3.0.8 关闭自动检测路径 $write = “NOFILE”

分词器$write = "NOFILE"
head(segment("./index.rmd", 分词器))
#> [[1]]
#> [1] "index" "rmd"