【发布时间】:2018-07-21 00:15:57
【问题描述】:
我需要清理一些单元格,只保留重要的词以生成搜索索引。
例如。 “如何提出帐户恢复请求”将被修剪为“提出帐户恢复请求”,因为“How, To, An”将在要过滤掉的单词列表中。
另一个复杂性是它也将是法语和西班牙语,这意味着我必须处理像 d' 这样的部分词。
到目前为止,我一直在尝试使用一个函数,但它不适用于部分词 (d'),如果“de”和“des”列在同一个单元格中,它将从 DES 中删除 DE然后只保留孤独的 S,因为不再识别 DES:
Function ClearWords(s As String, rWords As Range) As String
Static RX As Object
If RX Is Nothing Then
Set RX = CreateObject("VBScript.RegExp")
RX.Global = True
RX.IgnoreCase = True
End If
RX.Pattern = "\b" & Replace(Join(Application.Transpose(rWords), "|"), ".", "\.") & "\b"
ClearWords = Application.Trim(RX.Replace(s, ""))
End Function
【问题讨论】:
-
您是否考虑过同时搜索“account”、“recovery”和“request” ie and() ?
-
我有,但它将由用户生成并随着时间的推移而扩展。过滤掉常用词会容易得多。
-
好的,那么删除任何 3 个字母或更少的单词怎么样?
-
我认为您处理外语的要求对于这个问题来说过于广泛。为此,您很可能需要某种方式从输入中嗅探语言以确定要应用的哪个 组规则(将英文文本发送到法语替换,反之亦然等。)当你到达那一点时,我认为这应该是一个单独的问题,而不是这个问题的一部分。
-
请考虑添加一个minimal reproducible example(独立示例,不依赖于您的工作表——模拟一个简单的字符串数组或分隔列表代表您的工作表应该很容易)
rWords转换。