Spark NLP Normalizer中的 Regex不能正常工作



我使用Spark NLP管道来预处理我的数据。规范化器不仅删除标点符号,还删除了变音符。

我代码:

documentAssembler = DocumentAssembler() 
.setInputCol("column") 
.setOutputCol("column_document")
.setCleanupMode('shrink_full')
tokenizer = Tokenizer() 
.setInputCols(["column_document"]) 
.setOutputCol("column_token") 
.setMinLength(2)
.setMaxLength(30)

normalizer = Normalizer() 
.setInputCols(["column_token"]) 
.setOutputCol("column_normalized")
.setCleanupPatterns(["[^w -]|_|-(?!w)|(?<!w)-"])
.setLowercase(True)

的例子:

Ich esse gerne Äpfel vom Biobauernhof Reutter-Müller, die schmecken besonders gut!
输出:

Ich esse gerne pfel vom Biobauernhof Reutter Mller die schmecken besonders gut

预期输出:

Ich esse gerne Äpfel vom Biobauernhof Reutter-Müller die schmecken besonders gut

默认情况下,w模式不支持unicode,您需要使用regex选项使其支持unicode。在这种情况下,使用嵌入式标志选项(?U):

更容易做到这一点。
"(?U)[^w -]|_|-(?!w)|(?<!w)-"

更多细节请参考文档:

当指定此标志时,则(仅限US-ASCII)预定义字符类POSIX字符类符合Unicode技术标准#18:Unicode正则表达式附件C:兼容性属性

UNICODE_CHARACTER_CLASS模式也可以通过嵌入的标志表达式(?U)来启用。

该标志暗示UNICODE_CASE,也就是说,它允许unicode感知的大小写折叠。

最新更新