【问题标题】:How to use `LanguageDetectorDL` spark NLP on pyspark column?如何在 pyspark 列上使用“LanguageDetectorDL”火花 NLP?
【发布时间】:2021-06-30 04:10:32
【问题描述】:

我正在使用 pyspark 数据框。
我的 df 看起来像这样:

df.select('words').show(5, truncate = 130)

+----------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                                   words          |
+----------------------------------------------------------------------------------------------------------------------------------+
|[content, type, multipart, alternative, boundary, nextpart, da, df, nextpart, da, df, content, type, text, plain, charset, asci...|
|[receive, ameurht, eop, eur, prod, protection, outlook, com, cyprmb, namprd, prod, outlook, com, https, via, cyprca, namprd, pr...|
|[plus, every, photographer, need, mm, lens, digital, photography, school, email, newsletter, http, click, aweber, com, ct, l, m...|
|[content, type, multipart, alternative, boundary, nextpart, da, beb, nextpart, da, beb, content, type, text, plain, charset, as...|
|[original, message, customer, service, mailto, ilpjmwofnst, qssadxnvrvc, narrig, stepmotherr, eviews, com, send, thursday, dece...|
+----------------------------------------------------------------------------------------------------------------------------------+
only showing top 5 rows

我需要在words 列上使用spark NLP 中的LanguageDetectorDL array<strings> 类型,这样它就可以检测到英语并仅保留英语单词并删除其他单词。

我已经使用DocumentAssembler()将数据转换为注解格式:

documentAssembler = DocumentAssembler().setInputCol('words').setOutputCol('document')

但是我不知道如何在专栏中使用LanguageDetectorDL并摆脱非英语单词?

【问题讨论】:

  • 很难在单词级别检测语言 - 没有足够的信息进行可靠检测...
  • @AlexOtt 感谢您的调查。如果我将 array 转换回字符串,即如果我有句子,那么有可能吗?
  • 比如有句protection outlook com cyprmb namprd prod outlook com,那么有没有可能得到protection outlook com prod outlook com
  • 我不确定这是否可能 - 前提是您将使用某种字典查找或类似的东西。
  • 但是你为什么需要它?如果您正在做某种文本分类或类似的事情,那么这些词很可能具有非常低的 TF-IDF 或其他度量,并且将被排除在“字典”之外

标签: python apache-spark pyspark johnsnowlabs-spark-nlp


【解决方案1】:

Spark-NLP 的语言检测器在 char 级别工作。这意味着它不使用字典来匹配单词。 如果您提供整个句子,它肯定会更好地工作,但如果您只是以您想要检测的语言传递一大串连接标记,它应该表现得可以接受,例如使用检测 21 种不同语言的预训练模型,

from sparknlp.pretrained import PretrainedPipeline
language_detector_pipeline = PretrainedPipeline('detect_language_21', lang='xx')

language_detector_pipeline.annotate("«Нападение на 13-й участок»")


{'document': ['«Нападение на 13-й участок»'],
 'sentence': ['«Нападение на 13-й участок»'],
 'language': ['bg']}

检查您将使用的语言是否属于模型支持的语言,

https://nlp.johnsnowlabs.com/2020/12/05/detect_language_21_xx.html

并确保传递一个大约 150 个字符的字符串,以便模型有更多机会返回一个好的答案。

【讨论】:

  • 您必须将数据框中的字符串数组转换为由空格分隔的大字符串,并将其传递到管道的输入端。
  • 感谢您的调查。如果我传递了一个包含一些垃圾词的长英文句子,例如:ghurbgiueg, zasa, fjhirgre 但整个句子仍将被视为英语,因为如果我是对的,该模型是针对整个句子而不是几个词进行训练的.我怀疑是否可以在单词级别检测语言以及如何使用语言映射句子并使用过滤器删除这些单词?
猜你喜欢
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2019-02-07
  • 2020-04-18
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
相关资源
最近更新 更多