tokenize - sparkNLP 收缩的标记化
问题描述
我正在使用 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=ACfU3U1pklNa8NNELk_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, .]|
+------------------+
解决方案
这本书根本不是最新的默认行为(我也希望文档本身更全面)。看看这里annotators.Tokenizer
的界面和默认值。
据我了解,您以所需方式处理收缩的方式是修改后缀模式。
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'})]}]
推荐阅读
- javascript - 禁用文本的拖放
- javascript - 用于绕过 SSO 的示例 cypress 脚本
- c# - 有没有办法从委托中获取任何类型的动作作为唯一参数?
- java - 如何让我的琐事答案与我的问题保持在随机数组中?
- php - 如何在许多文件中查找和替换字符串
- bash - 如何使用 awk 在 bash 中格式化电话号码
- java - 从路径获取 jar 文件,并更改其类名
- typescript - 如何修复“browser.takeScreenshot”代理错误?
- azure-web-app-service - 如何使网站站点在 Internet 上的 8080 端口上可见
- c# - Wpf mediaelement播放没有声音的视频