gpt4 book ai didi

algorithm - 如何删除重复条款

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:20 25 4
gpt4 key购买 nike

我的问题如下:
如果我有一个字符串,其中的术语按其重要性排序(以逗号分隔):
text=“光,器件,发射,发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器,树脂,密封,器件光,半导体器件,发光器件,器件电极,紧凑型发光,紧凑型发光器件,紧凑型发光器件密封,器件发光二极管,器件光电耦合器件,器件密封,发光类型,发光类型,发光类型,发光类型,光输出,发光器件密封,光发射机,封装组件,光电耦合器件,光敏器件,半导体器件电极,半导体器件光电耦合器,透射式发射器,发光型,发光型,发光二极管型”
变量文本中的项可以按函数strsplit或包字符串的函数str_split拆分。

library(stringr)
str_split = strsplit(text[1], ", ")

如我们所见,object str_split由40个独立项组成。
现在,我想提取前10个不重复的条件。
let pocket={光,器件,发射,发光,光学,发光,二极管,电极,光电耦合器,半导体}
在第一次迭代中:光、器件、发射、发光、光学、发光、二极管、电极、光电耦合器、半导体。
术语“光”是“发光”的子集,因此我们删除术语“光”,并在可变文本中补充第11个术语,即设备发光。
更新:pocket={device,emitting,light emitting,optical,lightemitting,diode,electr极,光电耦合器,半导体,device light emitting}
在第二次迭代中:器件,发射,发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光
术语“器件”是“器件发光”的子集,因此我们删除术语“器件”,并在可变文本中补充第12个术语,即器件光电耦合器。
更新:pocket={发光,发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器}
在第三次迭代中:发射、发光、光学、发光、二极管、电极、光电耦合器、半导体、器件发光、器件光电耦合器
术语“发射”是“发光”的子集,因此我们删除术语“发射”,并在可变文本中补充第13个术语,即树脂。
更新:pocket={发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器,树脂}
在第4次迭代中:发光、光学、发光、二极管、电极、光电耦合器、半导体、器件发光、器件光电耦合器、树脂
术语“发光”是“器件发光”的子集,因此我们删除术语“发光”,并在可变文本中补充第14个术语,即密封。
更新:pocket={光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器,树脂,密封}
第5次迭代:光学、发光、二极管、电极、光电耦合器、半导体、器件发光、器件光电耦合器、树脂、密封
术语“光电耦合器”是“器件光电耦合器”的子集,因此我们删除术语“光电耦合器”,并在可变文本中补充第15个术语,即器件光。
更新:pocket={光学,发光,二极管,电极,半导体,器件发光,器件光电耦合器,树脂,密封,器件发光}
第6次迭代:光学、发光、二极管、电极、半导体、器件发光、器件光电耦合器、树脂、密封、器件光
术语“器件光”是“器件发光”的子集,因此我们删除术语“器件光”,并在可变文本中补充第16个术语,即半导体器件。
更新:pocket={光学,发光,二极管,电极,半导体,器件发光,器件光电耦合器,树脂,密封,半导体器件}
其余的可以类推。
我很难用R语言来暗示这种想法。
有人能帮我个忙吗?
最好的

最佳答案

您可以使用基于grepl的组合来实现这一点。只要得到所有不重复的条件,并采取前十,这很容易。这个小函数还控制单词内的匹配:在这种情况下,“light”与“lightemitting”不匹配。因此,在开始时使用粘贴功能(为每个术语添加一个空格)。

Remove <- function(x){
tmp <- paste(x,"")
id <- colSums(sapply(tmp,grepl,tmp))==1
x[id]
}

Txt <- "light, device, emitting, light emitting, optical, lightemitting, diode,
electrode, photocoupler, semiconductor, device light emitting,
device photocoupler, resin, sealing, device light, semiconductor device,
lightemitting device, device electrode, compact lightemitting"

Txt_split <- unlist(strsplit(Txt[1], ", "))

> Remove(Txt_split)
[1] "optical" "diode" "device light emitting"
"device photocoupler"
[5] "resin" "sealing" "semiconductor device"
"lightemitting device"
[9] "device electrode" "compact lightemitting"

编辑:这一个不遵循您概述的算法,因为这将需要在非常大的数据集上花费时间,并且随着它增长一个向量(由于内存问题的风险,这应该在r中避免)。

关于algorithm - 如何删除重复条款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658102/

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