我正在尝试使用tm包进行一些非常基本的文本分析并得到一些tf-idf分数; 我正在运行OS X(虽然我在Debian Squeeze上试过这个但结果相同); 我有一个目录(这是我的工作目录),里面有几个文本文件(第一集包含尤利西斯的前三集,第二集包含第二集,如果你必须知道的话).
R版本:2.15.1 SessionInfo()报告这个关于tm:[1] tm_0.5-8.3
相关的代码:
library('tm')
corpus <- Corpus(DirSource('.'))
dtm <- DocumentTermMatrix(corpus,control=list(weight=weightTfIdf))
str(dtm)
List of 6
$ i : int [1:12456] 1 1 1 1 1 1 1 1 1 1 ...
$ j : int [1:12456] 2 10 12 17 20 24 29 30 32 34 ...
$ v : num [1:12456] 1 1 1 1 1 1 1 1 1 1 ...
$ nrow : int 2
$ ncol : int 10646 …Run Code Online (Sandbox Code Playgroud) 所以,我正在尝试使用这个topicmodels包R(在6400个文档的语料库中有100个主题,每个约1000个单词).这个过程运行然后死掉,我想因为内存不足.
所以我尝试缩小lda()函数作为输入的文档术语矩阵的大小; 我想我可以minDocFreq在生成文档术语矩阵时使用该函数.但是当我使用它时,它似乎没有任何区别.这是一些代码:
以下是相关的代码:
> corpus <- Corpus(DirSource('./chunks/'),fileEncoding='utf-8')
> dtm <- DocumentTermMatrix(corpus)
> dim(dtm)
[1] 6423 4163
# So, I assume this next command will make my document term matrix smaller, i.e.
# fewer columns. I've chosen a larger number, 100, to illustrate the point.
> smaller <- DocumentTermMatrix(corpus, control=list(minDocFreq=100))
> dim(smaller)
[1] 6423 41613
Run Code Online (Sandbox Code Playgroud)
相同的维度和相同的列数(即相同数量的术语).
我觉得我做错了什么?谢谢.
我试图解决我自己关于更改包中的tf-idf加权函数的问题tm:https://stackoverflow.com/questions/15045313/changing-tf-idf-weight-function-weight-not-by-occurrences-的长期的,但是按numbe
在这样做时,我正在查看weightTfIdf包含以下代码的函数m,即TermDocumentMatrix.
cs <- col_sums(m)
Run Code Online (Sandbox Code Playgroud)
和
rs <- row_sums(m)
Run Code Online (Sandbox Code Playgroud)
但我找不到任何有关功能的文件row_sums或col_sums; 当我尝试使用它们编写自己的加权函数时,我收到一个错误:Error in weighting(x) : could not find function "col_sums"
这些功能在哪里定义?
我已粘贴R下面的完整功能信息:
function (m, normalize = TRUE)
{
isDTM <- inherits(m, "DocumentTermMatrix")
if (isDTM)
m <- t(m)
if (normalize) {
cs <- col_sums(m)
if (any(cs == 0))
warning("empty document(s): ", paste(Docs(m)[cs ==
0], collapse = " "))
names(cs) <- seq_len(nDocs(m))
m$v <- m$v/cs[m$j]
}
rs …Run Code Online (Sandbox Code Playgroud) 我正在使用 XSLT(XSLT 2.0 很好)将 XML (TEI) 转换为可读的纯文本(有一些小的修改/挑战——为诗歌保留空间;使标题全部大写)。
到目前为止,一切都如我所愿,但为了可读性,我还想将通过此转换输出的一行文本的长度限制为某个值(例如 80 个字符宽),仅在空格处拆分(不要把单词分开,等等)。我想设置输出的最大长度(或者说,80 个字符),而不仅仅是输出第一个,比如说,80 个字符。
有没有人对最佳方法有任何建议?模板是否匹配所有内容text()然后使用 XSLT 的内置字符串函数?我试图想象使用字符串函数(string-length和substring或类似的)来做到这一点,但还没有任何运气。
(我可以很容易地使用 python 脚本单独执行此操作,所以也许“事后执行”可能是最好的答案。不过,我很想知道我是否忽略了一个简单的解决方案。)