【问题标题】:Text Mining in R with Persian用波斯语在 R 中进行文本挖掘
【发布时间】:2020-04-23 10:48:48
【问题描述】:

我希望对一些我收集并存档在 csv 中的波斯语 Facebook 帖子进行一些简单的数据挖掘(频率、二元组、三元组)。下面是我将与 facebook cmets 的英语 csv 一起使用的脚本,以将所有单个单词取消嵌套到他们自己的列中。

stp_tidy <- stc2 %>%
  filter(!str_detect(Message, "^RT")) %>%
  mutate(text = str_replace_all(Message, "https://t.co/[A-Za-z\\d]+|http://[A-Za-z\\d]+|&amp;|&lt;|&gt;|RT","")) %>%
  unnest_tokens(word, text, token = "regex", pattern = reg_words) %>%
  filter(!word %in% stop_words$word,
         str_detect(word, "[a-z]"))

有没有人知道在波斯语(或特定的达里语)脚本中应用 unnest_tokens 的任何方法?

【问题讨论】:

  • 我认为使用 quanteda 或 udpipe 进行标记化、POS、Lemmatization 会有更好的结果。但是一个示例文本会很有帮助(和预期的结果)。
  • 感谢 phiver。这是我要阅读的 csv 类型的链接:filedropper.com/stptest 我希望看到与政治、年轻人、女性等有关的高频词(达里语)。
  • 道歉 - 这个filedropper.com/stptest_3
  • 只有前3条记录有数据,只有第2和3条记录有消息,对吗?
  • 是的,它只是一个包含超过 5k 个数据点的文件样本。显然可以随意忽略没有消息的记录。

标签: r data-mining text-mining


【解决方案1】:

2 个选项。第一个例子是使用 quanteda,第二个例子是使用 udpipe。

请注意,用波斯语打印小标题很奇怪,也就是特征和值往往会打印在错误的列中,但数据会正确存储在对象中以供进一步处理。两个选项之间的输出略有不同。但这些往往可以忽略不计。请注意,为了读取数据,我使用了 readtext 包。这往往与 quanteda 配合得很好。

1个量子

library(quanteda)
library(readtext)
# library(stopwords)

stp_test <- readtext("stp_test.csv", encoding = "UTF-8")

stp_test$Message[stp_test$Message != ""]
stp_test$text[stp_test$text != ""]

# remove records with empty messages

stp_test <- stp_test[stp_test$Message != "", ]

stp_corp <- corpus(stp_test, 
                   docid_field = "doc_id",
                   text_field = "Message")


stp_toks <- tokens(stp_corp, remove_punct = TRUE)
stp_toks <- tokens_remove(stp_toks, stopwords::stopwords(language = "fa", source = "stopwords-iso"))


# step for creating ngrams 1-3 can be done here, after removing stopwords. 
# stp_ngrams <- tokens_ngrams(stp_toks, n = 1L:3L, concatenator = "_")

stp_dfm <- dfm(stp_toks)
textstat_frequency(stp_dfm)

# transform into tidy data.frame
library(dplyr)
library(tidyr)
quanteda_tidy_out <- convert(stp_dfm, to = "data.frame") %>% 
  pivot_longer(-document, names_to = "features")

2 udpipe

library(udpipe)
model <- udpipe_download_model(language = "persian-seraji")
ud_farsi <- udpipe_load_model(model$file_model)

# use stp_test from quanteda example.
x <- udpipe_annotate(ud_farsi, doc_id = stp_test$doc_id, stp_test$Message)
stp_df <- as.data.frame(x)


# selecting only nouns and verbs and removing stopwords 
ud_tidy_out <- stp_df %>% 
  filter(upos %in% c("NOUN", "VERB"),
         !token %in% stopwords::stopwords(language = "fa", source = "stopwords-iso")) 

这两个包都有很好的小插曲和支持页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2013-11-17
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    相关资源
    最近更新 更多