1

我正在使用 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
4

1 回答 1

2

默认情况下,该\w模式不支持 Unicode,您需要使用正则表达式选项使其支持 Unicode。在这种情况下,使用嵌入式标志选项(?U)更容易做到这一点:

"(?U)[^\w -]|_|-(?!\w)|(?<!\w)-"

文档中的更多详细信息:

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

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

该标志暗示 UNICODE_CASE,也就是说,它启用了 Unicode 感知的大小写折叠。

于 2021-09-01T10:19:38.407 回答