首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收缩的sparkNLP标记化

收缩的sparkNLP标记化
EN

Stack Overflow用户
提问于 2021-10-19 17:02:21
回答 1查看 81关注 0票数 0

我正在使用sparkNLP版本3.2.3,并尝试对一些文本进行标记化。我使用了spacy和其他分词器,它们通过将缩写分为"they“和"'re”来处理缩写,比如"they'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和这个之间交换。

代码语言:javascript
复制
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)
代码语言:javascript
复制
+------------------+
|result            |
+------------------+
|[They're, fine, .]|
+------------------+
EN

回答 1

Stack Overflow用户

发布于 2021-10-22 13:19:09

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

根据我的理解,您可以通过修改后缀模式来以您想要的方式处理收缩。

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

代码语言:javascript
复制
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.")

这就给出了:

代码语言:javascript
复制
[{'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'})]}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69634998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档