rlads2021 / hw10

HW 10: Vector representations of text
https://rlads2021.github.io/hw10/
0 stars 0 forks source link

第一題 should print out 更正 #2

Open archielu opened 3 years ago

archielu commented 3 years ago

老師助教同學好, 第一題輸出的數值與sample output 有差異,另外有什麼辦法可以印出text2 , 我兩個標籤都是印出text1 感謝! 截圖 2021-05-15 下午5 53 35

liao961120 commented 3 years ago

感謝提醒~ 第一題的數值輸出 sample 確實是錯誤的,正確的數值如下:

#> 2 x 15 Matrix of class "dgeMatrix"
#>             [,1]         [,2]       [,3]       [,4]        [,5]       [,6]
#> text1 0.01082797 -0.005043434 0.01906469 0.02116770 -0.01264663 0.01741631
#> text2 0.04291259 -0.008224614 0.04674972 0.05099859 -0.02992219 0.03286311
#>             [,7]       [,8]        [,9]        [,10]        [,11]       [,12]
#> text1 0.03035976 0.02448952 -0.01062937 -0.005384180 -0.033654985 0.005100957
#> text2 0.06443163 0.03061845  0.01812084  0.002242561 -0.008611309 0.036203892
#>              [,13]        [,14]       [,15]
#> text1 -0.015062376 -0.007130964 0.001976622
#> text2 -0.009293649  0.026068611 0.002363140

至於 rowname 為何皆為 text1 需要看到程式碼才知道

archielu commented 3 years ago

好 那我先push再請老師幫忙看一下 感謝

liao961120 commented 3 years ago

是因為你是用 sapply() 為每一篇文本獨立製作一個的 document-term matrix,最後才將它們 rbind 起來, 所以每次建立新的 document-term matrix 時,因為只有一個 row,dfm() 這個函數就會自動將唯一的 row 的名稱設為 text1

如果想要避免這種情況,就要一次製作出包含所有文件的 document-term matrix。 方法是去調整 worker() 的設定,讓 segment() 的結果可以符合 tokens() 所要求的資料結構:

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