私のコード:
library(quanteda)
library(topicmodels)
# Some raw text as a vector
postText <- c("普京 称 俄罗斯 未 乌克兰 施压 来自 头 条 新闻", "长期 电脑 前进 食 致癌 环球网 报道 乌克兰 学者 认为 电脑 前进 食 会 引发 癌症 等 病症 电磁 辐射 作用 电脑 旁 水 食物 会 逐渐 变质 有害 物质 累积 尽管 人体 短期 内 会 感到 适 会 渐渐 引发 出 癌症 阿尔茨海默 式 症 帕金森 症 等 兔子", "全 木 手表 乌克兰 木匠 瓦列里·达内维奇 木头 制作 手表 共计 154 手工 零部件 唯一 一个 非 木制 零件 金属 弹簧 驱动 指针 运行 其他 零部件 材料 取自 桦树 苹果树 杏树 坚果树 竹子 黄杨树 愈疮木 非洲 红木 总共 耗时 7 打造 手表 不仅 能够 正常 运行 天 时间 误差 保持 5 分钟 之内 ")
# Create a corpus of the posts
postCorpus <- corpus(postText)
# Make a dfm, removing numbers and punctuation
myDocTermMat <- dfm(postCorpus, stem = FALSE, removeNumbers = TRUE, removeTwitter = TRUE, removePunct = TRUE)
# Estimate a LDA Topic Model
if (require(topicmodels)) {
myLDAfit <- LDA(convert(myDocTermMat, to = "topicmodels"), k = 2)
}
terms(myLDAfit, 11)
コードが機能し、結果が表示されます。出力の例を次に示します。
Topic 1 Topic 2
[1,] "木" "会"
[2,] "手表" "电脑"
[3,] "零" "乌克兰"
[4,] "部件" "前进"
[5,] "运行" "食"
[6,] "乌克兰" "引发"
[7,] "内" "癌症"
[8,] "全" "等"
[9,] "木匠" "症"
[10,] "瓦" "普"
[11,] "列" "京"
これが問題です。私の投稿はすべてセグメント化されており (中国語では必要な前処理ステップ)、ストップ ワードが削除されています。それにもかかわらず、トピック モデルは、既に削除された 1 文字の停止語を含むトピックを返します。生の .txt ファイルを開いて、特定の 1 文字のストップ ワードに対して ctrl-f を実行すると、結果が返されません。しかし、これらの用語は R コードから返されたトピックに表示されます。これはおそらく、個々の文字が他の複数文字の単語の一部として出現するためです。たとえば、就はストップワードとして扱われる前置詞ですが、成就は「成功」を意味します。
これに関連して、特定の用語が分割されています。たとえば、私が調査しているイベントの 1 つには、ロシアのプーチン大統領 (「普京」) への言及が含まれています。ただし、トピック モデルの結果では、"普" と "京" のエントリが別々に表示され、"普京" のエントリはありません。(未加工のテキストの最初の単語と比較して、出力トピック 2 の 10 行目と 11 行目を参照してください。)
ここで発生する追加のトークン化ステップはありますか?
編集:再現可能にするために変更されました。なんらかの理由で、紹介の段落も削除するまで投稿できませんでした。