从单词列表中提取所有匹配的关键字并创建一个新的数据框 pandas [重复]

2023-11-30

我想从意见列中提取所有匹配的关键字,如果它们与关键字列表中的单词匹配,则在新列中打印所有匹配的单词(包括重复的单词)。当前代码仅提取第一个匹配的单词,不包含重复的单词。

import pandas as pd

df = pd.DataFrame({
    'opinions':[
        "I think the movie is fantastic. Shame it's so short!",
        "How did they make it?",
        "I had a fantastic time at the cinema last night!",
        "I really disliked the cast",
        "the film was sad and boring",
        "Absolutely loved the movie! Can't wait to see part 2",
    ]
})

keywords = ['movie', 'great', 'fantastic', 'loved']

query = '|'.join(keywords)
df['word'] = df['opinions'].str.extract( '({})'.format(query) )

print(df)

电流输出

enter image description here


如果您只想匹配完整单词,则需要使用单词边界标记,否则前缀(和后缀)也会匹配。例如:

import pandas as pd

df = pd.DataFrame({
    'opinions':[
        "I think the movie is fantastic. Shame it's so short!",
        "How did they make it?",
        "I had a fantastic time at the cinema last night!",
        "I really disliked the cast",
        "the film was sad and boring",
        "Absolutely loved the movie! Can't wait to see part 2",
        "He has greatness within"
    ]
})

keywords = ['movie', 'great', 'fantastic', 'loved']

query = '|'.join(keywords)
df['word'] = df['opinions'].str.findall(r'\b({})\b'.format(query))

print(df)

Output

                                            opinions                word
0  I think the movie is fantastic. Shame it's so ...  [movie, fantastic]
1                              How did they make it?                  []
2   I had a fantastic time at the cinema last night!         [fantastic]
3                         I really disliked the cast                  []
4                        the film was sad and boring                  []
5  Absolutely loved the movie! Can't wait to see ...      [loved, movie]
6                            He has greatness within                  []

在上面的例子中greatness由于单词边界而未匹配(\b).

关于性能的说明

作为旁注,如果您正在寻找大数据的有效解决方案,联合正则表达式并不是一个好方法(请参阅here)。我建议你使用一个库,例如trrex.

import pandas as pd
import trrex as tx

df = pd.DataFrame({
    'opinions': [
        "I think the movie is fantastic. Shame it's so short!",
        "How did they make it?",
        "I had a fantastic time at the cinema last night!",
        "I really disliked the cast",
        "the film was sad and boring",
        "Absolutely loved the movie! Can't wait to see part 2",
        "He has greatness within"
    ]
})

keywords = ['movie', 'great', 'fantastic', 'loved']
query = tx.make(keywords, left=r"\b(", right=r")\b")

df['word'] = df['opinions'].str.findall(r'{}'.format(query))

print(df)

Output (使用 trrex)

                                            opinions                word
0  I think the movie is fantastic. Shame it's so ...  [movie, fantastic]
1                              How did they make it?                  []
2   I had a fantastic time at the cinema last night!         [fantastic]
3                         I really disliked the cast                  []
4                        the film was sad and boring                  []
5  Absolutely loved the movie! Can't wait to see ...      [loved, movie]
6                            He has greatness within                  []

For a comparison on performance see the image below: enter image description here

对于一组 25K 字的集合,trrex 比联合正则表达式快 300 倍。上图中的实验可以用以下命令重现gist

免责声明:我是trrex的作者

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从单词列表中提取所有匹配的关键字并创建一个新的数据框 pandas [重复] 的相关文章

随机推荐

  • 使用 XSLT 2.0 的两阶段转换

    我正在尝试将 CSV 文件作为输入并将其转换为 XML 我是 XSLT 新手 我找到了一种将 CSV 转换为 XML 的方法 使用来自安德鲁韦尔奇 像这样 输入 CSV 文件 car manufacturer model color pri
  • yaml 中的“>-”和“|-”有什么区别?

    我想确切地知道 gt 和 之间的区别 特别是在 kubernetes yaml 清单中 折叠块标量中的换行符 gt 受到行折叠 文字块标量中的换行符 不是 行折叠将非空行之间的单个换行符替换为空格 并且在空行的情况下 将周围非空行之间的换行
  • ASP.NET Core执行Linux shell命令

    有没有办法从 ASP NET Core 应用程序中执行 Linux shell 命令并将值返回到变量中 目前最好的可能性似乎是使用预发布版SSH Net Core https www nuget org packages SSH Net C
  • 使用 PHP 脚本进行 ERR_CONNECTION_RESET

    我有一个 PHP 脚本 可以下载和处理一些文件 有时文件数量非常大 因此需要一些时间 但是 当有大量文件需要处理时 连接会中断并出现 ERR CONNECTION RESET 错误 Chrome 这是我的配置 upload max file
  • 从网站上的按钮下载文件的 Python 脚本

    我想通过单击以下网址中的 导出到 Excel 按钮来下载 xls 文件 https apps tampagov net CallsForService Webapp Default aspx type TPD 更具体地说 按钮 name c
  • offsetTop 与 jQuery.offset().top

    我读过offsetLeft and offsetTop不能在所有浏览器中正常工作 jQuery offset 应该为此提供一个抽象 以提供正确的值 xbrowser 我想要做的是获取元素被单击的位置相对于元素左上角的坐标 问题是jQuery
  • 在 iOS 上读取 sms.db 和 call_history.db 文件?

    我正在为越狱的 iPhone 5s iOS 7 1 1 开发一个应用程序 以获取存储在相应 db 文件中的通话日志和消息 我有一些疑问 我有一个有效的证书 配置文件 并且我的应用程序是使用此配置文件签名的 因此是否有必要删除此配置文件并使用
  • 错误:控制到达非 void 函数的末尾

    我在学习C 我从教科书上复制了这段代码 在编译代码时 最后出现错误 错误说 控制到达非 void 函数的末尾 它位于代码的末尾 include ComplexNumber hpp include
  • 限制线程数和 Java 并发

    我找不到使用最新 JAVA 并发例程的具体案例的示例 我打算使用threads处理可能包含 0 到数千个请求的开放队列中的项目 我想限制在任何给定时间都有不少于 0 且不超过 10 个线程处理队列项目 是否有针对这种特定类型案例的 Java
  • 如何使用 JqGrid 更改 select2 下拉列表的选定值?

    我用的是奥列格的选择2演示 但我想知道是否可以更改下拉菜单中当前选择的值 例如 如果加载的四个值是 Any Fruit Vegetable Meat 下拉列表默认为 Any 我怎样才能将其更改为 Fruit 在 JqGrid 事件中load
  • Android Studio 空白活动

    我使用的是 Android Studio 2 1 没有 空白活动 选项 我见过有人问过这个问题 一般的建议是 自己做一个 问题是我对 Android 开发一无所知 所以我正在学习这个教程http developer android com
  • jQuery onclick 删除表格行

    如何点击删除表格行 这里有一个jsfiddle 我只想删除 del 链接嵌套的行 而不是脚本现在执行的最后一行 单击呼叫delTableRow 函数并且需要更改该函数以删除嵌套的 del 链接行
  • jqGrid 多选上的 PrettyCheckable

    我有一个jqGrid带有我用 CSS 自定义的多选复选框的表格和漂亮可检查 要自定义我设置的表格的所有复选框 prettyCheckable 如下 jQuery document ready function input type chec
  • sqoop 与 mysql 的导入问题

    我有一个基于 cdh5 的 hadoop ha 设置 我尝试使用 sqoop 从 mysql 导入表失败 并出现以下错误 15 03 20 12 47 53 ERROR manager SqlManager Error reading fr
  • 空格上仅支持 JavaScript 的自动换行功能?

    我发现的大多数自动换行功能都绑定到 css 和 或浏览器 dom 我正在 javascript 环境 rhino 中工作 需要找到或设计一个更好的自动换行 该换行可以在给定行长度值之前的空白处中断 我当前的解决方案只是搜索给定字符之前的最后
  • C++ 中如何进行柯里化?

    什么是柯里化 C 中如何进行柯里化 请解释一下STL容器中的活页夹 1 什么是柯里化 柯里化只是意味着将多个参数的函数转换为单个参数的函数 使用一个例子可以很容易地说明这一点 取一个函数f它接受三个参数 int f int a std st
  • 解决 pex 内部类

    当被测试的类是内部类时 有什么方法可以让 pex 工作吗 密封课程怎么样 我的意思是 毕竟这种类型的工具非常适合 API 测试 有时您可能希望至少将内容保留在内部 Thanks 通过以下方式为测试组件提供内部可见性InternalsVisi
  • 有没有办法模糊匹配或提供分数作为行值应与哪个 ID 或组关联的假设?

    我有一个看起来像这样的数据集 structure list ID c 1 2 3 4 5 6 7 8 9 10 Date c 2020 01 n04 2020 04 03 2020 12 10 2020 09 12 2020 11 19 2
  • 在运行时修改函数(拉出局部变量)

    想象一下这个简单的函数创建变量的修改值default modified default 0 def modify modified default 1 print modified replace with OS call I can t
  • 从单词列表中提取所有匹配的关键字并创建一个新的数据框 pandas [重复]

    这个问题在这里已经有答案了 我想从意见列中提取所有匹配的关键字 如果它们与关键字列表中的单词匹配 则在新列中打印所有匹配的单词 包括重复的单词 当前代码仅提取第一个匹配的单词 不包含重复的单词 import pandas as pd df