当前位置: 首页 > 知识库问答 >
问题:

将关键字提取模型应用于包含文本的Spark DataFrame列

任昊阳
2023-03-14

想象一下,我有一个Spark DataFrame行星,其中包含2列-id描述

我想应用不同的关键字提取模型,并为每个< code>id从< code>description列的相应文本中提取关键字。

在几乎所有实现示例中,模型都接受文本作为字符串。
但是,例如,我如何实现keyBERT模型(查看此处的示例)处理描述列而不是简单的文本字符串?

在输出中,我需要使用模型找到的前n个关键字的新列来扩展我的原始数据框:

我将不胜感激任何帮助!

共有1个答案

司徒炎彬
2023-03-14

您可以使用RDD.map将函数应用于rdd中的每个元素。

我太懒了,无法真正安装keyBERT,所以我将制作自己的extract_keywords函数来展示一个示例。

rdd = sc.parallelize(enumerate(("Mercury is the closest planet to the Sun. The smallest planet in the Solar System, Mercury has no natural satellites. The dominant geological features are impact craters or basins with ejecta blankets, the remains of early volcanic activity including magma flows, and lobed ridges or rupes that were probably produced by a period of contraction early in the planet's history.", "Venus is close in size to Earth and has a thick silicate mantle around an iron core and evidence of internal geological activity. Venus is the hottest planet mainly due to the amount of greenhouse gases in the atmosphere. Venus has no magnetic field that would prevent depletion of its substantial atmosphere, which suggests that its atmosphere is being replenished by volcanic eruptions."), start=1))

from heapq import nlargest

def extract_keywords(s):
    return nlargest(4, s.split(), key=len)

rdd = rdd.map(lambda x: (x[0], x[1], extract_keywords(x[1])))

print( rdd.collect() )
# [(1, "Mercury is ...", ['satellites.', 'contraction', 'geological', 'blankets,']),
#  (2, 'Venus is ...', ['atmosphere.', 'substantial', 'atmosphere,', 'replenished'])]

我不熟悉keyBERT,但从他们展示的示例来看,我认为以下两个片段之一可能是合适的:

# EITHER USE SAME MODEL FOR EVERYONE
kw_model = KeyBERT()
rdd = rdd.map(lambda x: (x[0], x[1], kw_model.extract_keywords(x[1])))

# OR USE NEW MODEL FOR EACH ELEMENT
rdd = rdd.map(lambda x: (x[0], x[1], KeyBERT().extract_keywords(x[1])))
 类似资料:
  • 问题内容: 我正在寻找Java库以从文本块中提取关键字。 该过程应如下所示: 停止单词清洗->词干->根据英语语言统计信息搜索关键字-意味着单词在单词中出现的次数比在英语中出现的次数多于候选单词。 是否有执行此任务的库? 问题答案: 这是使用ApacheLucene的可能解决方案。我没有使用最新版本,但使用3.6.2版本,因为这是我所知道的最好的版本。除了之外,别忘了将下载的存档中的添加到您的项目

  • 本文向大家介绍python提取包含关键字的整行数据方法,包括了python提取包含关键字的整行数据方法的使用技巧和注意事项,需要的朋友参考一下 问题描述: 如下图所示,有一个近2000行的数据表,需要把其中含有关键字‘颈廓清术,中央组(VI组)'的数据所在行都都给抽取出来,且提取后的表格不能改变原先的顺序。 问题分析: 一开始想用excel的筛选功能,但是发现只提供单列筛选,由于关键词在P,S,V

  • 我使用OpenNlp的训练API训练了一个自定义的NER模型,其中包含超过一百万个句子,用于识别我所教的技能。在测试过程中,我发现识别技能的模型和技能的子串。例如,我教过一项技能“核心Java”,如果句子中有“核心”一词,那么我的模型会将其识别为一项技能。我想避免这种情况。如果整个单词都在测试句子中,我只想识别整个单词“Core Java”。 如何改进我的自定义模型以获得上述结果?

  • 问题内容: 我有一个充满关键字的索引,根据这些关键字,我想从输入文本中提取关键字。 以下是示例关键字索引。请注意,关键字也可以是多个单词,或者基本上是唯一的标签。 现在,如果输入文本为 “我在Facebook上看到了借贷俱乐部的新闻,您的故事和法定人数” ,则搜索结果应为 [“借贷俱乐部”,“ facebook”,“您的故事”,“法定人数”] 。此外,搜索应 区分大小写 问题答案: 只有一种真正的

  • 问题内容: 我必须从关键字后的SQL字段中的文本中提取内容。例如,如果我在表中有一个名为description的字段,并且该字段的表内容为: asdasf关键字狗 aeee关键字cat ffffaa关键字狼 我想提取并保存“关键字”之后的文本(在本例中为“狗,猫和狼”),然后将其保存在视图中,或者简单地通过选择显示它。谢谢你。 问题答案: 这是一个使用示例: 另一个例子: 结果: 请注意,此字符串

  • 问题内容: 假设我们有以下模型: 假设不是通过ManyRelatedPrimaryKeyField函数获得这样的结果: 让它返回包含完整相关模型表示的内容,例如: 这可能吗?如果是这样,怎么办?这是一个坏主意吗? 问题答案: 最简单的方法是使用depth参数 但是,这仅包括前向关系的关系,在这种情况下,这并不是你真正需要的,因为教师字段是反向关系。 如果你有更复杂的要求(例如,包括反向关系,嵌套一

  • 原文 如何仅从这3个字符串中提取数字。这样我就可以得到:

  • 我有一个如下所示的XML,正在尝试基于关键字提取节点。尝试使用XPath和XMLLint。但很明显,我做得不对。希望能在这方面有所帮助。 XML文件 给定此XML和关键字任务目标(不区分大小写),我需要提取整个节点并写入另一个XML文件 我尝试使用Xpath和XMllint进行提取。 有谁能告诉我上面的问题是什么,我如何解决?此外,我想在文件目录的shell中执行此操作。XMLlint是最佳选择吗