首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除重复的术语

如何删除重复的术语
EN

Stack Overflow用户
提问于 2011-01-11 13:26:33
回答 1查看 168关注 0票数 3

我的问题如下:

如果我有一个字符串,并根据它们的重要性进行排序(用逗号分隔):

正文=“光、器件、发光、光致发光、二极管、电极、光电耦合器、半导体、器件发光、器件光发射、器件光耦合器、密封、器件光、半导体器件、发光器件、器件电极、紧凑型发光器件、紧凑型发光器件密封、器件发光二极管、器件光耦合器件、器件密封、类型、发光类型、光输出、光输出、发光器件密封、光发射机、封装组件、光耦合器件、光敏、半导体器件电极、半导体器件光耦合器、透射式光耦合器件、发射机、变送器、类型光、发光二极管”。

变量strsplit文本中的术语可以由包字符串的函数或函数拆分。

代码语言:javascript
运行
复制
library(stringr)
str_split = strsplit(text[1], ", ")

正如我们所看到的,对象str_split是由40个分开的术语组成的。

现在,我想摘取前10个不重复的术语.

袖珍={光,器件,发光,发光,光学,发光,二极管,电极,光电耦合器,半导体}

第一次迭代:光,器件,发射,发光,光学,发光,二极管,电极,光电耦合器,半导体。

术语" light“是”发光“的子集,因此我们删除了术语"light”,并在可变文本中补充了第11项,即设备发光。

更新:袖珍={器件,发射,发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光}

第二次迭代:器件,发射,发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光

术语“设备”是“设备发光”的子集,因此我们删除了“设备”一词,并在可变文本中补充了第12项,即设备光耦合器。

更新:袖珍={发射,发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器}

第三次迭代:发射,发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器。

术语“发射”是“发光”的子集,因此我们删除了术语“发射”,并在可变的文本中补充了第13项,即树脂。

更新:袖珍={发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器,树脂}

第四次迭代:发光,光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器,树脂。

术语“发光”是“器件发光”的子集,因此我们删除了“发光”一词,在可变的文本中补充了第14项,即密封。

更新:袖珍={光学,发光,二极管,电极,光电耦合器,半导体,器件发光,器件光电耦合器,树脂,密封}

在第5次迭代中:光学、光刻、二极管、电极、光电耦合器、半导体、器件发光、器件光电耦合器、树脂、密封。

术语“光耦合器”是“器件光耦合器”的子集,因此我们删除了“光耦合器”一词,在可变文本中补充了第15项,即器件光。

更新:袖珍={光学,发光,二极管,电极,半导体,器件发光,器件光电耦合器,树脂,密封,器件光}

在第六次迭代中:光学,发光,二极管,电极,半导体,器件发光,器件光电耦合器,树脂,密封,器件光。

术语“设备光”是“器件发光”的子集,因此我们删除了“器件光”一词,并在可变文本中补充了第16项,即半导体器件。

更新:袖珍={光学,发光,二极管,电极,半导体,器件发光,器件光电耦合器,树脂,密封,半导体器件}

其余的可以通过类推.

我很难用R语言来暗示这样的想法。

有人能帮我个忙吗?

最好的

EN

回答 1

Stack Overflow用户

发布于 2011-01-11 14:13:14

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

代码语言:javascript
运行
复制
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中应该避免这种情况)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4658102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档