【问题标题】:How to parse for a word in text in JavaScript?如何在 JavaScript 中解析文本中的单词?
【发布时间】:2011-05-25 12:13:56
【问题描述】:

在文本页面中,我想检查每个单词。当时阅读每个单词的最佳方法是什么?很容易找到被空格包围的单词,但是一旦你开始解析文本中的单词,它就会变得复杂。

不是定义我自己的从文本中解析单词的方式,而是已经构建了一些东西来解析正则表达式或其他方法中的单词?

文本中的一些单词示例。

  word word. word(word) word's word word' "word" .word. 'word' sub-word 

【问题讨论】:

    标签: javascript


    【解决方案1】:

    你可以使用:

    text = "word word. word(word) word's word word' \"word\" .word. 'word' sub-word";
    words = text.match(/[-\w]+/g);
    

    这将为您提供一个包含所有单词的数组。

    在正则表达式中,\w 表示a-zA-Z0-9_ 的任何字符。 [-\w] 表示\w- 的任何字符。 [-\w]+ 表示这些字符中的任何一个出现 1 次或多次。

    如果您想将单词定义为比上述表达式更多的内容,请在 [-\w] 字符类中添加构成单词的其他字符。例如,如果您希望单词也包含(),请将字符类设为[-\w()]

    有关正则表达式的介绍,请查看regular-expressions.info 的精彩教程。

    【讨论】:

    • 这很好,除非他需要每场比赛的上下文(即在括号中,连字符等);然后变得困难。但是是的 - 正则表达式确实适用于“单词”:)
    • 完美答案。这是一种天真的标记化方法,但在 99% 的情况下,它就足够了。
    • 确实,如果您需要的不仅仅是提取单词,例如构建自然语言树,那么仅使用正则表达式就无济于事。但我的印象是 OP 只需要一系列单词......
    【解决方案2】:

    你说的是Tokenisation。至少可以说,这不是微不足道的,并且是主要搜索引擎的密集研究主题。有许多使用各种服务器端语言的开源标记化库(例如,参见斯坦福 NLP 和 Lucene 项目),但据我所知,在 javascript 中没有任何东西可以接近这些。您可能必须自己动手 :) 或者在服务器端进行处理,然后通过 AJAX 加载结果?

    【讨论】:

      【解决方案3】:

      我在这里支持 Richard 的回答 - 但补充一点 - 构建标记器(恕我直言)的最简单方法之一是 Antlr;一些疯子已经为它构建了一个 Javascript 目标;从而允许您在 Web 浏览器中运行和执行语法(查看“运行时库”部分 here

      我不会假装那里没有学习曲线。

      【讨论】:

        【解决方案4】:

        看看regular expressions - 你几乎可以定义任何你想要的解析算法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-31
          • 2020-01-17
          • 1970-01-01
          • 2013-12-24
          • 1970-01-01
          • 2013-08-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多