R 中的 FastText language_identification 返回太多参数 - 如何匹配文本?

问题描述 投票:0回答:1

FastText language_identification 针对每个原始文本返回多个预测,并且也无法指示哪些预测属于哪个原始文档。

每个原始文档的预测数量也不同——他们的 GitHub 论坛现在已关闭,但有人知道如何将输出与原始文本匹配吗?

代码:

DF = data.frame(doc_id = seq(1, 5),
speechtext = c("Hello. Fake text entry 1.", "Fake text entry 2", "more text", "Text in a
different language", "Hola"))

library(fastText)
# download .ftz pretrained model from https://fasttext.cc/docs/en/language-identification.html
file_ftz = system.file("language_identification/lid.176.ftz", package = "fastText")
lang1 = language_identification(DF$speechtext,
                                pre_trained_language_model_path = file_ftz,
                                verbose = T)

我期望每个原始文本都有一个预测,或者至少有一个一致的数字,或者某种标记预测与哪个文档一致的方式。

实际上,我可以根据输出的几个元素的每个系列的最大数量进行猜测,但这似乎不是最佳的 - 它看起来确实像一个错误。

(我尝试添加 intern = T 作为每个 R - fasttext 如何从命令行将输出加载到数据帧中的参数 - 这不被识别为参数)。

r nlp fasttext language-detection
1个回答
0
投票

fastText::language_identification()

的第一个参数定义为:

有效路径的有效字符串

其中每行代表不同的文本摘录或文本摘录向量(强调我的)

您的输入数据中有换行符,因此每行您将得到一个预测。您有两个选择:

    删除输入数据中的新行。
  1. 保留新行并将文档 ID 映射到每行。
删除新行

如果用空格替换新行,您将获得与输入行返回的相同数量的预测。

在下面的正则表达式中,我使用了 PCRE

\v

,它匹配换行符和任何被视为垂直空白的字符。现在生成五行,每一行与每个输入行相关。

language_identification(gsub("\\v", " ", DF$speechtext, perl = TRUE), file_ftz) # iso_lang_1 prob_1 # <char> <num> # 1: en 0.220767 # 2: en 0.388695 # 3: en 0.613707 # 4: en 0.757671 # 5: es 0.721487

\v

 包含多个垂直空格字符(例如换页符和行分隔符),因此应涵盖所有可能的换行类型。有关完整详细信息,请参阅表格
此处

按行映射文档 ID

或者,如果每个输入文档的不同行可能采用不同的语言,您可能不想删除新行。在这种情况下,您可以单独预测每一行,然后将文档 ID 映射到每一行:

# As before lang1 <- language_identification(DF$speechtext, file_ftz) # Add document IDs lang1$doc_id <- rep( DF$doc_id, lengths(strsplit(DF$speechtext, "\\v", perl = TRUE)) ) lang1 # iso_lang_1 prob_1 doc_id # <char> <num> <int> # 1: en 0.220767 1 # 2: en 0.388695 2 # 3: en 0.613707 3 # 4: en 0.932691 4 # 5: en 0.571937 4 # 6: es 0.721487 5
    
© www.soinside.com 2019 - 2024. All rights reserved.