【问题标题】:sparkNLP Tokenization of ContractionssparkNLP 收缩的标记化
【发布时间】:2021-12-06 15:01:38
【问题描述】:

我正在使用 sparkNLP 3.2.3 版并尝试标记一些文本。我使用 spacy 和其他分词器来处理诸如“他们是”之类的缩略词,将其拆分为“他们”和“'re”。根据此资源页面 105-107 sparkNLP 也应该以这种方式进行标记:https://books.google.com/books?id=5DDtDwAAQBAJ&pg=PA106&lpg=PA106&dq=spark+nlp+tokenizer+contractions&source=bl&ots=5bao0SzjQ7&sig=ACfU3U1pklNa8NNElLk_tX48tMKHuFGViA&hl=en&sa=X&ved=2ahUKEwij6abZ29bzAhU0CjQIHaIkAE4Q6AF6BAgUEAM#v=onepage&q=spark%20nlp%20tokenizer%20contractions&f=false

但是,当我通过 sparkNLP 标记化实际运行一些收缩时,它并没有将它们分开。任何想法可能会发生什么?由于其他原因我想使用这个包,所以不想在 spacy 或 NLTK 和这个之间交换。

import sparknlp
from sparknlp.base import *
from sparknlp.annotator import *
from pyspark.ml import Pipeline

data = spark.createDataFrame([["They're fine."]]).toDF("text")
documentAssembler = DocumentAssembler().setInputCol("text").setOutputCol("document")
tokenizer = Tokenizer().setInputCols(["document"]).setOutputCol("token").fit(data)

pipeline = Pipeline().setStages([documentAssembler, tokenizer]).fit(data)
result = pipeline.transform(data)

result.selectExpr("token.result").show(truncate=False)
+------------------+
|result            |
+------------------+
|[They're, fine, .]|
+------------------+

【问题讨论】:

    标签: tokenize johnsnowlabs-spark-nlp


    【解决方案1】:

    这本书根本就不是最新的默认行为(我也希望文档本身更全面)。看看annotators.Tokenizer 接口和默认here

    据我了解,您希望以自己的方式处理收缩的方式是修改后缀模式。

    suffixPattern 默认为([^\s\w]?)([^\s\w]*)\z(根据版本 3.2.3 的文档字符串)。通过将其更改为('re)\z(您需要根据您的需要调整模式),您可以实现以下目标:

    toker = Pipeline(stages=[
        DocumentAssembler()\
            .setInputCol("text")\
            .setOutputCol("document"),
        Tokenizer()\
            .setInputCols(["document"])\
            .setOutputCol("tokens")\
            .setSuffixPattern(r"('re)\z")
    ])
    toker_m = toker.fit(sql.createDataFrame(pd.DataFrame([{"text": ""}])))
    toker_lm = LightPipeline(toker_m)
    toker_lm.fullAnnotate("They're fine.")
    

    给出:

    [{'document': [Annotation(document, 0, 12, They're fine., {})],
      'tokens': [Annotation(token, 0, 3, They, {'sentence': '0'}),
       Annotation(token, 4, 6, 're, {'sentence': '0'}),
       Annotation(token, 8, 12, fine., {'sentence': '0'})]}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2019-08-07
      • 2016-12-12
      • 2021-12-01
      • 2021-02-12
      • 2015-03-19
      相关资源
      最近更新 更多