gpt4 book ai didi

r - 从标签向量列表创建标签频率的数据框

转载 作者:行者123 更新时间:2023-12-04 22:34:42 24 4
gpt4 key购买 nike

我正在用 R 编写一个函数来查找类型对话的形式统计(一种语言度量)。我使用 openNLP 的词性标注器来标记单词(很棒的工具,但速度很慢,因为它正在做一些繁重的工作)。无论如何,此功能已经存在时间问题,我遇到了一个问题,我想尽快使其运行。我开始用令人费解的术语思考,并且知道我需要一些集体的集体思考来解决这个问题。

我有一个带有标签的向量列表,如下所示:

G 
[[1]]
[1] "MD" "DT" "NN" "VB" "VBG" "TO" "POS"

[[2]]
[1] "DT" "NN" "JJ" "RB"

[[3]]
[1] "RB" "TO" "PRP"

[[4]]
[1] "VBZ" "PRP" "VBG" "RB" "TO" "NN"

[[5]]
[1] "NN" "NN"

对于每个向量,我想计算所有可能标签的出现频率(将插入一个不包含标签的向量的零)并生成如下所示的数据帧结构:
  DT  JJ  MD  NN  POS PRP RB  TO  VB  VBG VBZ
1 1 0 1 1 1 0 0 1 1 1 0
2 1 1 0 1 0 0 1 0 0 0 0
3 0 0 0 0 0 1 1 1 0 0 0
4 0 0 0 1 0 1 1 1 1 1 1
5 0 0 0 2 0 0 0 0 0 0 0

我已经开始考虑下面的问题以及假数据集。我最初想用这个表,但我不确定 9 因为我知道这比说使用 rlematch 或索引 [ 慢,如果可以使用这些中的任何一个。我还考虑过在这些向量上使用 Reducemerge 来进行多重合并,但我知道 R 中的高阶函数可能比其他方法慢(也许这可以通过一些甜蜜的索引来完成)。

无论如何,我将非常感谢您对这个问题的帮助。我正在寻找的两个参数是:
  • 基本解决方案
  • 速度

  • 数据和我的初步想法(表可能走错了路:
    G <- list(c("MD", "DT", "NN", "VB", "VBG", "TO", "POS"), c("DT", "NN", 
    "JJ", "RB"), c("RB", "TO", "PRP"), c("VBZ", "PRP", "VBG", "RB",
    "TO", "NN"), c("NN", "NN"))

    P <- lapply(G, function(x) table(sort(x))) #to get frequencies on each word
    sort(unique(names(unlist(P)))) #to get the column names and number

    为线程名称道歉,因为这是一个很难分类的。

    编辑:(添加基准标记结果)

    很有创意的回答。我什至没有考虑因子解决方案和指定水平。聪明的。对于速度 Joran 的第二个答案风(我刚刚使用您已经创建的 lev 重新添加了列名称。mdsummer 的响应是最少的代码,并且与速度并列第二。我将采用 Joran 的第二个响应,因为它将使我获得最好的速度提升。谢谢大家!非常感谢:) 比较可作为要点 https://gist.github.com/trinker/91802b8c4ba759034881
           expr        min         lq      mean     median        uq       max neval
    JORAN1() 648.04435 689.16756 714.9142 712.59122 732.4991 831.6623 100
    JORAN2() 86.83879 92.91911 98.7068 97.44690 101.6764 177.4228 100
    RINKER() 87.40797 94.07564 100.1154 98.39624 104.0887 177.3146 100
    TIM() 900.65847 964.23419 993.9475 988.89306 1023.0587 1137.6263 100
    MDSUMMER() 1395.95920 1487.45279 1527.3181 1527.92664 1571.0997 1685.3298 100

    最佳答案

    我会这样做:

    lev <- sort(unique(unlist(G)))

    G1 <- do.call(rbind,lapply(G,function(x,lev){ table(factor(x,levels = lev,
    ordered = TRUE))},lev = lev))

    DT JJ MD NN POS PRP RB TO VB VBG VBZ
    [1,] 1 0 1 1 1 0 0 1 1 1 0
    [2,] 1 1 0 1 0 0 1 0 0 0 0
    [3,] 0 0 0 0 0 1 1 1 0 0 0
    [4,] 0 0 0 1 0 1 1 1 0 1 1
    [5,] 0 0 0 2 0 0 0 0 0 0 0

    或者为了更快的速度(但丢失列名):
    G1 <- do.call(rbind,lapply(G,function(x,lev){ tabulate(factor(x,levels = lev,
    ordered = TRUE),nbins = length(lev))},lev = lev))

    关于r - 从标签向量列表创建标签频率的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961209/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com