Fasttext langue_identification for each 原始文本返回多个预测,并且也无法指示哪些属于哪个原始文档.

每个原始文档的预测数量也不同--他们的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)

我预计每条原始文本有一个预测,或者至少有一个一致的数字,或者以某种方式标记预测与哪些文档一致.

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

(我try 添加intern = T作为每R - fasttext how to load output into a dataframe from command line个参数--这不被视为参数).

推荐答案

fastText::language_identification()的第一个参数定义为:

有效字符串到有效路径where each line represents a different text extract or a vector of text extracts(强调我的)

您的输入数据中有断点:

DF$speechtext[4]
[1] "Text in a\ndifferent language"

当您每条行获得一个预测时,您将从该元素获得两个预测.您有两个 Select :

  1. 删除输入数据中的新行.这在这种情况下是有道理的.
  2. 保留新行并将文档ID映射到每一行.如果新行实际上可能使用不同的语言,这是有道理的.

删除新线路

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

在下面的regex中,我使用了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包括几个垂直空白字符(例如表单提要和行分隔符),因此应该涵盖所有可能的新行类型.有关完整详细信息,请参阅表here.

逐行 map 文档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

R相关问答推荐

R kableExtra在插入水平线时添加额外的空白行

R图中的字体大小和字体样式(带有R底图)

从R中的函数中提取变量以及它们来自哪些环境?

根据列表中项目的名称多次合并数据框和列表

如何修复R码的置换部分?

基于不同组的列的相关性

如何计算R数据集中每个女性的子元素数量?

根据模式将一列拆分为多列,并在R中进行拆分

基于多列将值链接到NA

当我们有多个特殊字符时,使用gsub删除名称和代码'

如果某些列全部为NA,则更改列

根据文本字符串中的值粘贴新列

如何在观测缺失的地方添加零

DEN扩展包中的RECT树形图出现异常行为

R-按最接近午夜的时间进行筛选

根据另一列中的值和条件查找新列的值

将全局环境变量的名称分配给列表中的所有元素

有没有办法定制Plot(allEffects())面板标题?

如何移动点以使它们的打印不重叠

R-找出存在其他变量的各种大小的所有组合