Text 删除属于其他字符串的子字符串

Text 删除属于其他字符串的子字符串,text,substring,Text,Substring,给定一组字符串,我需要删除集合中另一个字符串的子字符串。子字符串可以出现在任何位置。我预计至少50%的字符串将是其他字符串的子字符串。我的字符串是来自大型自然语言语料库的n-gram 例如,给定(“大轿车”、“大轿车”、“在大轿车”、“买大轿车”、“买大轿车”、“买大房子”),那么结果应该是(“在大轿车”、“买大轿车”、“买大房子”);对输出进行排序并不重要 因为我的集合有100000个字符串,所以不能对每个字符串进行暴力测试 有人知道这个问题的标准解决方案吗 或者,有人能补充我的一些想法吗:

给定一组字符串,我需要删除集合中另一个字符串的子字符串。子字符串可以出现在任何位置。我预计至少50%的字符串将是其他字符串的子字符串。我的字符串是来自大型自然语言语料库的n-gram

例如,给定(“大轿车”、“大轿车”、“在大轿车”、“买大轿车”、“买大轿车”、“买大房子”),那么结果应该是(“在大轿车”、“买大轿车”、“买大房子”);对输出进行排序并不重要

因为我的集合有100000个字符串,所以不能对每个字符串进行暴力测试

有人知道这个问题的标准解决方案吗

或者,有人能补充我的一些想法吗:

  • 如果我先对字符串进行排序,那么在字符串的开头(以及使用反向排序的字符串的结尾)挑选子字符串应该会更容易?仍然需要在其他地方处理子字符串

  • 使用树结构?像下面这样的?(i) 向每个字符串添加开始和结束标记;(ii)树中的第一个节点是START;(iii)字符串“big car”->新分支启动big car END,但当添加“the big car”时,分支成为启动big car END;(iv)一旦插入所有字符串,则从开始到结束读取所有路径。考虑到潜在的大量单词(至少1000个),对此不确定。同样,同一个单词在一个句子中出现不止一次的问题

  • 我是否可以为蛮力添加一些内存,以便将处理的下一个字符串与之前删除的一组字符串进行比较


我正在使用R中的lappy函数来实现这一点:

calc <- function(e, df){
    i <- 1
    while (!(grepl(e[[1]],df[i,1], fixed=TRUE, ignore.case = TRUE)) & i <=nrow(df)){

        i <- i + 1

    }       
    return (df[i,])
}


    reduced  <- lapply(input_df[,1], calc, df=input_df)
    output_df <- do.call(rbind,reduced)

calc我使用R中的lappy函数来实现这一点:

calc <- function(e, df){
    i <- 1
    while (!(grepl(e[[1]],df[i,1], fixed=TRUE, ignore.case = TRUE)) & i <=nrow(df)){

        i <- i + 1

    }       
    return (df[i,])
}


    reduced  <- lapply(input_df[,1], calc, df=input_df)
    output_df <- do.call(rbind,reduced)

calc我想你想要一个算法?如果您想要一个示例代码来删除特定编程语言(如c#)中的子字符串。我想你可以使用lambda表达式,它的性能不慢,可能是个不错的选择我想你想要一个算法?如果您想要一个示例代码来删除特定编程语言(如c#)中的子字符串。我认为可以使用lambda表达式,它的性能不慢可能是一个不错的选择