【问题标题】:Javascript optimizing regex function to extract sentences from a string containing a keywordJavascript优化正则表达式函数以从包含关键字的字符串中提取句子
【发布时间】:2020-07-02 12:07:28
【问题描述】:

我目前有一个函数来获取一个字符串,将其分解为句子,然后提取包含用户定义关键字的句子并返回它们:

function getSentencesWithWord(word, text) {
    let sentenceArray = text.replace(/([.])\s*(?=[A-Z])/g, "$1|").split("|")
    return sentenceArray.filter(sentence => sentence.includes(word))
}

目前,此功能有效。但是,我需要使用此功能搜索的文本量非常大;它正在搜索大约 30 个 google 文档,每个文档最多可达 75 页,并且搜索某些术语(例如单词“the”)可能需要一分钟才能完成该功能。有没有更优化的方法来搜索和提取这么多文本?

编辑:

因为有人在 cmets 中询问,word 变量只是从 HTML 页面上的文本输入中获得的字符串,而text 变量是通过 Google Apps Script 中的此函数获得的字符串:

function getText(docID){
    let doc = DocumentApp.openById(docID);
    let textToSearch = doc.getBody().getText();
    return textToSearch;
}

我有一个包含我需要访问的所有 google 文档 ID 的数组,我只需遍历数组并获取每个文档的文本

【问题讨论】:

  • 您能分享一下wordtext var 的情况吗?您如何获取和解析所有这些文档?
  • 您可以直接在/(?<=\.)\s*(?=[A-Z])/ 上拆分,而不是用管道替换此空间,然后在管道上拆分,这会抑制替换命令。它假设您可以使用尚未在所有浏览器中支持的lookbehind。
  • @Kessy 我更新了解释这一点的原始帖子
  • 您的问题解决了吗?如果没有,还有什么要补充的吗?

标签: javascript regex google-apps-script


【解决方案1】:

您提供的替换 replace(/([.])\s*(?=[A-Z])/g, "$1|") 对我不起作用 == 得到相同的字符串而没有更改...

这个怎么样:

("|"+text.toLowerCase().replace(/\s/g, "|")+"|").includes("|"+word.toLowerCase()+"|")

或者,这个:

("|"+text.toLowerCase().split(" ").join("|")+"|").includes("|"+word.toLowerCase()+"|")

【讨论】:

  • 这用管道替换了所有个空格! OP 的正则表达式将文本分成单独的句子。
  • 是的,@Toto 是正确的;我需要将一段文本分成单独的句子而不是替换所有空格
  • 我又试了一次,它只返回一个由整个文本组成的单项数组。 function getSentencesWithWord(word, text) { let sentenceArray = text.replace(/([.])\s*(?=[A-Z])/g, "$1|").split("|") return sentenceArray.filter(sentence => sentence.includes(word)) }getSentencesWithWord("how", "hello world! how are you?") 返回["hello world! how are you?"]
  • 所以是的,这是按预期工作的,原来的正则表达式故意不计算任何标点符号,除了句点
  • 明白了(终于...)。好吧,如果它没有坏 - 为什么要修复它?!?您可以浏览文本,找到单词,返回找到句子的开头并前进找到句子的结尾,剪切并推送到数组...或者,按句子结尾拆分并使用包含搜索该数组。
【解决方案2】:

无法使用 Google Apps 脚本找到更快的方法来实现这一点,所以我只是回到 Node.js 并最终使用 Google Drive API 将文件下载为 .txt 文件,这些文件要小得多,所以我现在可以更快地搜索它们

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2019-11-24
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多