Open patricia40719 opened 3 years ago
我看了你的程式碼,應該是因為斷詞那邊的寫法,造成斷詞後的資料結構與後續函數所要求的不一樣。
記得餵給 tokens()
的結構要是個 list
,裡面的每個元素是一篇斷好詞的文章 (character vector):
library(dplyr)
library(quanteda)
segged_docs <- list(
c("這是", "第一篇", "文章" ),
c("那", "是", "第二篇", "文章")
)
segged_docs
#> [[1]]
#> [1] "這是" "第一篇" "文章"
#>
#> [[2]]
#> [1] "那" "是" "第二篇" "文章"
segged_docs %>% tokens()
#> Tokens consisting of 2 documents.
#> text1 :
#> [1] "這是" "第一篇" "文章"
#>
#> text2 :
#> [1] "那" "是" "第二篇" "文章"
segged_docs %>% tokens() %>% dfm()
#> Document-feature matrix of: 2 documents, 6 features (41.67% sparse) and 0 docvars.
#> features
#> docs 這是 第一篇 文章 那 是 第二篇
#> text1 1 1 1 0 0 0
#> text2 0 0 1 1 1 1
但使用函數segment(docs, worker() )
處理過後的檔案就已經是一個「每個元素是一篇斷好詞的文章」的list了不是嗎,為什麼我將segment()
處理後的檔案丟進tokens()還是不行呢?
然後如果寫成list( segment(docs, seg ) )
,這樣text1和text2都會被丟進list的第一個元素,這樣也沒辦法跑tokens(),還是有沒有什們辦法把text1和text2拆成兩個元素呢?
嗯沒錯
你要研究看看 worker()
bylines
的設定對於輸出的資料結構的影響
但使用函數
segment(docs, worker() )
處理過後的檔案就已經是一個「每個元素是一篇斷好詞的文章」的list了不是嗎
這個不正確喔,worker()
預設的情形下會讓 segment()
將所有傳入的 vector 元素當成「一篇」文章:
library(jiebaR)
docs <- c(
"這是第一篇文章",
"那是第二篇文章"
)
seg1 <- worker()
seg2 <- worker(bylines = T)
segment(docs, seg1)
#> [1] "這是" "第一篇" "文章" "那" "是" "第二篇" "文章"
segment(docs, seg2)
#> [[1]]
#> [1] "這是" "第一篇" "文章"
#>
#> [[2]]
#> [1] "那" "是" "第二篇" "文章"
請問針對最後面的檢驗碼
encode_document(docs = c(doc1, doc2), dtm = q_dfm, lsa = lsa_model)
出現錯誤: features must be coercible to character
,這是什麼意思?