【问题标题】:Best way to parse a text document解析文本文档的最佳方法
【发布时间】:2011-04-13 13:37:32
【问题描述】:

我正在尝试在 PHP 中解析纯文本文档,但不知道如何正确执行。 我想分隔每个单词,为它们分配一个 ID,然后以 JSON 格式保存结果。

示例文本:

"Hello, how are you (today)"

这就是我现在正在做的事情:

$document_array  = explode(' ', $document_text);
json_encode($document_array);

生成的 JSON 是

[["Hello,"],["how"],["are"],["you"],["(today)"]]

我如何确保空格保持原位并且符号不与单词一起包含...

[["Hello"],[", "],["how"],[" "],["are"],[" "],["you"],["  ("],["today"],[")"]]

我确定需要某种正则表达式...但不知道应用哪种模式来处理所有情况...有什么建议吗?

【问题讨论】:

    标签: php regex json parsing


    【解决方案1】:

    这实际上是一个非常复杂的问题,需要进行大量的学术研究。这听起来很简单(只是在空格上分割!可能有一些标点符号规则......)但你很快就会遇到问题。 “没有”是一两个词吗?连字符的单词怎么办?有些可能是一个词,有些可能是两个。多个连续的标点字符呢?所有格与引号?等等等等。即使确定句子的结尾也很重要。 (这只是一个句号吧?!)

    这个问题是tokenisation 之一,也是搜索引擎非常重视的一个话题。老实说,您应该真正考虑以您选择的语言寻找标记器。

    【讨论】:

    • 是的,第 3 方解决方案可能是最好的选择……我敢肯定,他们多年来制定了相当复杂的规则来处理这些问题。有什么建议吗?
    • 在 php 中没有。 java中有数:Open NLP、Stanford NLP、Lucene的分词器、Python中的NLTK。
    • Python 是另一种基于 Web 的语言...以前没用过,但我想我可以在 python 中实现解析器,然后将 JSON 发送回 PHP...以某种方式
    【解决方案2】:

    也许是这样:?

    array_filter(preg_split('/\b/', $document_text))
    

    “array_filter”,删除结果数组的第一个和/或最后一个索引处的空值,如果您的字符串以单词边界开始或结束,则会出现这些值(\b 请参阅:http://php.net/manual/en/regexp.reference.escape.php

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 1970-01-01
      • 2018-07-27
      • 2010-09-08
      • 2010-12-22
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多