我正在尝试用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"],[")"]]
我确定需要某种正则表达式...但不知道应用什么样的模式来处理所有情况......有什么建议吗?
答案 0 :(得分:4)
这实际上是一个非常复杂的问题,并且受到相当多的学术研究。这听起来很简单(只是在空格上分开!可能有一些标点规则......)但你很快就会遇到问题。 “没有”一两个字?连字符怎么样?有些可能是一个词,有些可能是两个词。多个连续的标点符号怎么样?占有率与报价?甚至确定一个句子的结尾也是不平凡的。 (这只是一个句号吗?!)
此问题是tokenisation之一,是搜索引擎非常重视的主题。说实话,你应该真正选择用你选择的语言找到一个tokeniser。
答案 1 :(得分:2)
也许这个:?
array_filter(preg_split('/\b/', $document_text))
'array_filter',删除结果数组的第一个和/或最后一个索引处的空值,如果您的字符串以字边界开头或结尾(\ b请参阅:http://php.net/manual/en/regexp.reference.escape.php)< / p>