【发布时间】:2012-03-21 05:19:33
【问题描述】:
在 R 中,grep 通常将多个字符串的向量与一个正则表达式匹配。
问:是否有可能将单个字符串与多个正则表达式匹配? (不循环每个正则表达式模式)?
一些背景:
我有 7000 多个关键字作为几个类别的指标。我无法更改该关键字字典。字典结构如下(第1列的关键词,数字表示这些关键词所属的类别):
ab 10 37 41
abbrach* 38
abbreche 39
abbrich* 39
abend* 37
abendessen* 60 63
aber 20 23 45
abermals 37
用“|”连接这么多关键字不是一种可行的方法(而且我不知道哪个关键字产生了命中)。 此外,仅仅颠倒“模式”和“字符串”是行不通的,因为模式有截断,反过来也行不通。
[related question,其他编程语言]
【问题讨论】:
-
我喜欢 dan 的建议,但是对于大型数据集,您可能会遇到一些重大的速度问题。如果您想在字典中查找某些内容并返回相应的值,我建议采用不同的方法:使用 strsplit 将句子分解为单个单词的向量,然后应用哈希表进行快速查找。我认为您可能还希望将关键字和类别指示符分成字典中的两个单独的列。我会在那里提供帮助,但前提是您更清楚最终结果是需要。
-
同意重组字典数据并使用哈希表进行查找(取决于期望的结果),但匹配应该相对较快取决于字符串的数量,即使有大量的关键字.我将在我的答案中添加一个快速基准。
-
如果你真的有很多单词(通常是人类语言中的所有单词,google索引的所有单词等),你可以使用prefix tree(有时也称为“特里”)。但我不知道 R 中有任何实现。