如何在Lua中匹配一个句子

如何在Lua中匹配一个句子,lua,lua-patterns,Lua,Lua Patterns,我试图创建一个正则表达式,它试图匹配一个句子 这里是一个片段 local utf8 = require 'lua-utf8' function matchsent(text) local text = text for sent in utf8.gmatch(text, "[^\r\n]+\.[\r\n ]") do print(sent) print('-----') end end 但是,它的工作方式与python不同。我知道Lua使用不同的正则表达式模式集,并

我试图创建一个正则表达式,它试图匹配一个句子

这里是一个片段

local utf8 = require 'lua-utf8'
function matchsent(text)
  local text = text
  for sent in utf8.gmatch(text, "[^\r\n]+\.[\r\n ]") do
    print(sent)
    print('-----')
  end
end

但是,它的工作方式与python不同。我知道Lua使用不同的正则表达式模式集,并且它的正则表达式功能有限,但是为什么上面的正则表达式会给我一个语法错误?在Lua中匹配正则表达式的句子会是什么样子

请注意,Lua使用的Lua模式不是“正则”表达式,因为它们无法与正则语言匹配。它们很难用于将文本拆分成句子,因为您需要考虑各种缩写、间距、大小写等。由于任务的复杂性,要将文本拆分成句子,您需要一个NLP包,而不是一个或两个正则表达式

关于

为什么上面的正则表达式会给我一个语法错误

您需要在Lua模式中用
%
符号转义特殊符号。请参见示例代码:

function matchsent(text)
    for sent in string.gmatch(text, '[^\r\n]+%.[\r\n ]') do
        print(sent)
        print("---")
    end
end
matchsent("Some text here.\nShow me")

一个

你需要使用
%
来转义特殊符号。是的,这是可行的,但是“Bonn博士藏在一棵树中”怎么样?句子,它将被错误地拆分。请注意,Lua模式不是正则表达式,默认情况下无法将句子与缩写匹配。您可能希望使用类似
%.%s+(%u)
,将其替换为say
§%1
,然后使用
[^§]+
gmatch
将其“拆分”为“句子”,但这仍然是近似值,因为它无法分辨
。来自
的新句子
。波恩博士
。看见注意,在Lua中不能使用Python
(?:(?:Dr|Mrs)\.[^\r\n.])+\.
之类的东西,因为Lua模式不支持交替,更不用说量化组了。是的,句子标记化本身是一个单独的主题,我只是希望我能避开一些近似的Python正则表达式。@minerals:事实上,即使在Python中,也最好使用
nltk
来完成此任务。在Ruby中,有一个。然而,由于大量使用交替,它不能移植到基于Lua模式的解决方案中。