7 常见问题

7.0.1 为什么 tm 包里词都连起来了?

不建议使用 tm 包。

建议使用 text2vec 包,版本大于 v0.4 对于中文有很好的支持。对于输入的文本,建议均使用 enc2utf8 保证输入的中文文本是 UTF-8 编码。

7.0.1.1 问题描述

tm 包对中文支持不好,直接输入中文就会有遇到下面的情况,应该只在 Windows (各种编码问题….)上会有,Linux下没有这个问题。

library(tm)

xx<-c(
"进入", "一个", "平衡", "时代", "现在", "是", "住宅", "价格上涨",
"太快", "政府", "采用", "政策", "方式", "调控", "这些", "资金",
"就", "有", "往", "商业地产", "走", "的", "趋势", "因为", "商业地产",
"把", "自己", "划分", "到", "这", "一类", "去", "从", "职业",
"来说", "我", "可能", "是", "设计师", "医生", "老师", "记者",
"那", "我", "就", "做", "一个", "好", "的", "记者", "好", "的",
"医生", "这是", "社会", "上", "需要", "的", "现在", "这个", "时代",
"确实", "是", "一个", "特别", "好", "的", "时代", "也", "是")

corpus = Corpus(VectorSource(xx))
dtm_psy = TermDocumentMatrix(corpus)
tdm = DocumentTermMatrix(corpus,control = list(wordLengths = c(1, Inf)))
inspect(tdm)

Terms
Docs 20 30 
  奥运会\n 把\n 白领 北京市\n 背道而驰 本来 不\n 不大 不好 财经 采用
   1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

7.0.2 空行警告

Output file:  C:/test.txt 
警告信息:
In readLines(input.r, n = lines, encoding = encoding) :
  "C:/test.txt'时最后一行...."

这个信息提示是待处理文本的结尾,应该有一个空行。为什么需要空行,可以参考这里:

http://www.zhihu.com/question/20018991

http://segmentfault.com/q/1010000000614237

一般来说这个警告对分词结果没有影响,这不是一个规定,而是一种约定。

一些早期的工具(编辑器/解释器/终端……等)会错误地认为:如果一个文件的结尾不是新行(没有回车或换行符)那么它读取到的内容不是正常结束,而是使用 ^Z(即 EOF Mark)结束的。这会导致这些工具不能正常工作。

一些编辑器,比如 Nano,会自动给每一个文档追加一个新行以避免这个问题。自然而然的,如果一个项目里有人使用了类似 Nano 的编辑器来写代码,他贡献的文件理所当然会有一个新行在结尾。那么制定代码规范的人也就理所当然的要求所有的人遵循这个约定。

虽然现在的编辑器大都先进到可以无视(自动处理)这个问题,但是留一个空行始终还是有一个巨大的好处。