我正在使用R中的topicmodels包进行主题建模.我正在创建一个Corpus对象,进行一些基本的预处理,然后创建一个DocumentTermMatrix:
corpus <- Corpus(VectorSource(vec), readerControl=list(language="en"))
corpus <- tm_map(corpus, tolower)
corpus <- tm_map(corpus, removePunctuation)
corpus <- tm_map(corpus, removeWords, stopwords("english"))
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, removeNumbers)
...snip removing several custom lists of stopwords...
corpus <- tm_map(corpus, stemDocument)
dtm <- DocumentTermMatrix(corpus, control=list(minDocFreq=2, minWordLength=2))
Run Code Online (Sandbox Code Playgroud)
然后执行LDA:
LDA(dtm, 30)
Run Code Online (Sandbox Code Playgroud)
最后调用LDA()返回错误
"Each row of the input matrix needs to contain at least one non-zero entry".
Run Code Online (Sandbox Code Playgroud)
我认为这意味着在预处理之后至少有一个文档中没有任何术语.有没有一种简单的方法可以从DocumentTermMatrix中删除不包含任何术语的文档?
我查看了topicmodels包的文档,找到了函数removeSparseTerms,它删除了任何文档中没有出现的术语,但没有类似的删除文档.
假设我有一个类型的值Monad m => (m a, m a),我想"序列"该对以创建一个类型Monad m => m (a, a)的值,它以"序列"函数的相同方式组合两个值的monadic上下文.这样做有一些标准功能或标准方式吗?这项操作甚至有意义吗?
假设我们有以下newtype定义:
newtype A = A { _run :: Monad m => A -> [Int] -> m Int }
Run Code Online (Sandbox Code Playgroud)
这不能用GHC 8.0.2编译:
error: Not in scope: type variable ‘m’
Run Code Online (Sandbox Code Playgroud)
正如我所料,用m类似的IO或类似的具体类类替换[].鉴于这没关系,为什么GHC不允许上面的签名?在此内部添加类型类约束有什么问题newtype?