python 中文本的 n 元语法

2023-12-21

我之前的更新post https://stackoverflow.com/questions/49064114/extracting-n-grams-from-tweets-in-python,进行一些更改:

假设我有 100 条推文。 在这些推文中,我需要提取:1)食物名称,2)饮料名称。我还需要为每次提取附加类型(饮料或食物)和 ID 号(每个项目都有一个唯一的 ID)。

我已经有一个包含名称、类型和 ID 号的词典:

lexicon = {
'dr pepper': {'type': 'drink', 'id': 'd_123'},
'coca cola': {'type': 'drink', 'id': 'd_234'},
'cola': {'type': 'drink', 'id': 'd_345'},
'banana': {'type': 'food', 'id': 'f_456'},
'banana split': {'type': 'food', 'id': 'f_567'},
'cream': {'type': 'food', 'id': 'f_678'},
'ice cream': {'type': 'food', 'id': 'f_789'}}

推文示例:

经过对“tweet_1”的各种处理后,我有以下句子:

sentences = [
'dr pepper is better than coca cola and suits banana split with ice cream', 
'coca cola and banana is not a good combo']

我请求的输出(可以是其他type than list):

["tweet_id_1",
 [[["dr pepper"], ["drink", "d_124"]],
  [["coca cola"], ["drink", "d_234"]],
  [["banana split"], ["food", "f_567"]],
  [["ice cream"], ["food", "f_789"]]],

 "tweet_id_1",,
 [[["coca cola"], ["drink", "d_234"]],
  [["banana"], ["food", "f_456"]]]]

重要的是输出应该NOT提取 ngram 中的 unigram (n>1):

["tweet_id_1",
 [[["dr pepper"], ["drink", "d_124"]],
  [["coca cola"], ["drink", "d_234"]],
  [["cola"], ["drink", "d_345"]],
  [["banana split"], ["food", "f_567"]],
  [["banana"], ["food", "f_456"]],
  [["ice cream"], ["food", "f_789"]],
  [["cream"], ["food", "f_678"]]],

 "tweet_id_1",
 [[["coca cola"], ["drink", "d_234"]],
  [["cola"], ["drink", "d_345"]],
  [["banana"], ["food", "f_456"]]]]

理想情况下,我希望能够在各种 nltk 过滤器中运行我的句子,例如 lemmatize() 和 pos_tag()BEFORE提取以获得如下输出。但是使用这个正则表达式解决方案,如果我这样做,那么所有单词都会被分割成一元组,或者它们将从字符串“coca cola”生成 1 个一元组和 1 个二元组,这将生成我不想要的输出(如上面的例子)。 理想的输出(再次type输出的大小并不重要):

["tweet_id_1",
 [[[("dr pepper", "NN")], ["drink", "d_124"]],
  [[("coca cola", "NN")], ["drink", "d_234"]],
  [[("banana split", "NN")], ["food", "f_567"]],
  [[("ice cream", "NN")], ["food", "f_789"]]],

 "tweet_id_1",
 [[[("coca cola", "NN")], ["drink", "d_234"]],
  [[("banana", "NN")], ["food", "f_456"]]]]

可能不是最有效的解决方案,但这肯定会让您开始 -

sentences = [
'dr pepper is better than coca cola and suits banana split with ice cream', 
'coca cola and banana is not a good combo']

lexicon = {
'dr pepper': {'type': 'drink', 'id': 'd_123'},
'coca cola': {'type': 'drink', 'id': 'd_234'},
'cola': {'type': 'drink', 'id': 'd_345'},
'banana': {'type': 'food', 'id': 'f_456'},
'banana split': {'type': 'food', 'id': 'f_567'},
'cream': {'type': 'food', 'id': 'f_678'},
'ice cream': {'type': 'food', 'id': 'f_789'}}

lexicon_list = list(lexicon.keys())
lexicon_list.sort(key = lambda s: len(s.split()), reverse=True)

chunks = []

for sentence in sentences:
    for lex in lexicon_list:
        if lex in sentence:
                chunks.append({lex: list(lexicon[lex].values()) })
                sentence = sentence.replace(lex, '')

print(chunks)

Output

[{'dr pepper': ['drink', 'd_123']}, {'coca cola': ['drink', 'd_234']}, {'banana split': ['food', 'f_567']}, {'ice cream': ['food', 'f_789']}, {'coca cola': ['drink', 'd_234']}, {'banana': ['food', 'f_456']}]

解释

lexicon_list = list(lexicon.keys())获取需要搜索的短语列表并按长度对它们进行排序(以便首先找到更大的块)

输出是一个列表dict,其中每个字典都有list values.

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

python 中文本的 n 元语法 的相关文章

  • 如何使用 python 从嵌套表结构中识别最终父级?

    我有下表 我的问题是 我如何以编程方式识别最终父级 以下是通过示例解释的规则 the id 5 0的父母是51 0 身份证号51 0没有父母 因此 id5 0的最终父级是51 0 the id 6 0的父母是1 0 身份证号1 0的父母是1
  • 使用解析将 ** 运算符更改为幂函数?

    我的要求是将 运算符更改为幂函数 例如 1 Input B 2 Output power B 2 2 B 2 T 2 X Output power B 2 我写了下面的正则表达式来解决这个问题 rx r a zA Z0 9 a zA Z0
  • 预处理 csv 文件以与 tflearn 一起使用

    我的问题是关于在将 csv 文件输入神经网络之前对其进行预处理 我想使用 python 3 中的 tflearn 为著名的 iris 数据集构建一个深度神经网络 数据集 http archive ics uci edu ml machine
  • 生产环境的 Flask-Login 与 Flask-Security

    我正在构建一个功能 供用户注册 登录 验证和授权自己 特别是使用 Python Flask 作为后端 我找到了一些解决方案 例如flask login and flask security 据我了解 flask login实际上并没有进行任
  • 正则表达式接受 4 条规则中的 3 条

    我似乎无法让正则表达式正确满足以下要求 长度在 8 到 20 之间的字符串 必须包含至少 1 个大写字母字符 至少 1 个小写字母字符 以及至少 1 个数字或至少 1 个特殊字符字符 或两者 假设特殊字符仅限于包括 我最初是这样写的 A Z
  • 如何在 sqlalchemy 中创建基于文字的查询?

    我创建了一个函数来创建表达式 def test operator1 operation operator2 return literal column operator1 op operation operator2 现在当我用 test
  • Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

    我希望在数据帧中的每一行的局部范围内进行计算 同时避免速度缓慢for环形 例如 对于下面数据中的每一行 我想找到未来 3 天内 包括当天 的最高气温以及未来 3 天内的总降雨量 Day Temperature Rain 0 30 4 1 3
  • 如何使用子进程打开新的浏览器选项卡?

    我正在打开一个新的 IE 窗口 subprocess Popen r os environ PROGRAMFILES Internet Explorer IEXPLORE EXE Call URL 当 IE 关闭时这很好 但即使打开它也会生
  • 使用 python 写入 aws lambda 中的 /tmp 目录

    Goal 我正在尝试将 zip 文件写入 python aws lambda 中的 tmp 文件夹 因此我可以在压缩之前提取操作 并将其放入 s3 存储桶中 Problem 操作系统 Errno30 只读文件系统 这段代码在我的计算机上进行
  • Javascript 正则表达式来匹配正则表达式

    我正在研究一个特殊的正则表达式来匹配 javascript 正则表达式 现在我有这个正则表达式工作 i g m 例如 foo match i g m gt foo foo undefined foo i match i g m gt foo
  • 将多个 isinstance 检查转换为结构模式匹配

    我想转换此现有代码以使用模式匹配 if isinstance x int pass elif isinstance x str x int x elif isinstance x float Decimal x round x else r
  • Mac 上的 Errno 13 权限被拒绝

    我只是测试如何从一个 py 文件调用外部 py 文件 我有 2 个 py 文件 都在同一目录中 这是主要代码 runext py 假设调用 ext py import subprocess subprocess call Users tra
  • 使用 Matplotlib、PyQt 和 Threading 进行实时绘图导致 python 崩溃

    我一直在努力研究我的 Python 应用程序 但找不到任何答案 我有 PyQT GUI 应用程序 它使用 Matplotlib 小部件 GUI 启动一个新线程来处理 mpl 小部件的绘图 恐怕我现在通过从另一个线程访问 matplotlib
  • 如何在 Python 中包含 PHP 脚本?

    我有一个 PHP 脚本 news generator php 当我包含它时 它会抓取一堆新闻项并打印它们 现在 我在我的网站 CGI 中使用 Python 当我使用 PHP 时 我在 新闻 页面上使用了这样的内容 为了简单起见 我删掉了这个
  • Numba jitclass 不适用于 python 列表

    我在用python 3 6 and numba 0 36 这个问题有一个sister https stackoverflow com questions 48159360 numba custom stack class and pop f
  • 为什么 Python exec 中的模块级变量无法访问?

    我正在尝试使用Pythonexec in a project https github com arjungmenon pypage执行嵌入的Python代码 我遇到的问题是在模块级 in an exec声明是难以接近的来自同一模块中定义的
  • “ModuleNotFoundError:我的 Docker 容器中没有名为 的模块”

    我正在尝试在 Docker 容器中运行 python 脚本 但我不知道为什么 python 找不到任何 python 模块 我认为它与 PYTHONPATH 环境变量有关 所以我尝试将其添加到 Dockerfile 中 如下所示 ENV P
  • 透视包含字符串的 Pandas Dataframe - “没有要聚合的数字类型”错误

    关于此错误有很多问题 但环顾四周后 我仍然无法找到 解决解决方案 我正在尝试用字符串旋转数据框 以使一些行数据变成列 但到目前为止还没有成功 我的 df 的形状
  • 从 xgb.train() 获取概率

    我是 Python 和机器学习的新手 我在网上搜索了我的问题 并尝试了人们建议的解决方案 但仍然没有得到它 如果有人能帮助我 我将非常感激 我正在开发我的第一个 XGboost 模型 我已经使用 xgb XGBClassifier 调整了参
  • Pymongo 批量插入

    我正在尝试批量插入文档 但批量插入时不会插入超过 84 个文档 给我这个错误 in insert pymongo errors InvalidOperation cannot do an empty bulk insert 是否可以批量插入

随机推荐

  • 运行“粘贴”时出现 VBA 运行时错误 438

    我刚刚熟悉 VBA 和我的代码 For k 3 To ThisWorkbook Sheets Count ThisWorkbook Sheets k Activate ActiveSheet Cells 11 2 Select lLastR
  • 查找常见编辑的算法

    我有两个单词列表 例如 list 1 list 2 foot fuut barj kijo foio fuau fuim fuami kwim kwami lnun lnun kizm kazm 我想找到 o u 1 and 3 i a 3
  • 不同项目中多个类的基类

    这更多的是一个设计问题 目前 我有多个类 在不同的项目中 它们具有不同的角色 但有一种通用方法可以执行相同的职责 我正在考虑为所有这些类建立一个基类 以便每个类都可以继承这个类并实现这个方法以节省重复 我的问题是 我应该为多个项目中的所有类
  • 一名读者。一位作家。关于互斥体和原子内置函数的一些常见问题

    我有一个父线程和一个共享 bool 标志和 std vector 的工作线程 父级仅读取 即读取 bool 或调用 my vector empty 工人只写 我的问题 我需要互斥保护布尔标志吗 我可以说所有 bool 读 写本质上都是原子操
  • 代码是启发式无法访问的

    与 检测到无法访问的代码 相比 这意味着什么 启发式无法访问意味着代码可能无法访问 无法访问的代码肯定是无法访问的
  • 在VUE js中获取数组中数据的索引

    我想在调用特定方法时更改任务的状态 但问题是我无法获取数组特定项目的索引来更改其状态 这是我的 HTML div class main ul li task description li ul div
  • $locationProvider 在我的 Angular 页面中不起作用

    在我的角度页面中我使用的是 locationProvider 但它在我的网页上不起作用 我的控制台出现这样的错误 HTML5 模式下的 location 需要存在标签 所以我添加一个 这在我的角度页面中也不起作用 在这里我提到了我的目录结构
  • Webpack SCSS @charset 和 @import 问题

    我的 scss 文件中有以下几行 google fonts url https fonts googleapis com css family Source Sans Pro Lato 300 import url google fonts
  • PDFBox - 如果设置为只读,则不会显示复选框

    我正在使用 PDFBox 生成 PDF 我需要在其中添加一个复选框 该复选框需要预设为选中和只读 但有些怎么行不通 请找到下面的代码 它在 PDF 上添加了复选框 import java io File import java io IOE
  • 使用可以为空的列测试不等式

    所以 我问了一个question https stackoverflow com questions 1833949 why is null not equal to null false今天早上 我没有正确地表达 所以我收到了很多关于为什
  • Flask-admin:将 inline_models 渲染为列表视图?

    我有一个Motion模型有很多Votes 我将投票显示为inline model in flask admin 是否可以将选票呈现为表格 如list view模板 而不是像这样 使用 Flask admin 中的规则 您可以更改创建表单或编
  • 禁止用 ReplaceAll (/.) 进行替换

    来自 Mathematica 自己的文档 g 1 Hold g 1 g n gt n 1 leads to 2 Hold 1 1 我的问题 有没有办法保护子表达式不被 ReplaceAll 替换 我使用复合结构作为变量 例如 v a b 并
  • javascript电子邮件验证检查条件问题

    example
  • 如果数组中的所有值都相同,如何打印字符串

    我有一个保存数字的数组 int tarningar new int 5 当所有数字都相同时 我想打印 OK 例如与类似的东西system out println ok 我努力了if tarningar 1 tarningar 2 tarni
  • 使用 LINQ/扩展方法重复字符串[重复]

    这个问题在这里已经有答案了 只是我正在调查的好奇心 问题是 简单地重复 乘法 有人会说 字符串 字符n times 我知道有可枚举 重复为了这个目标 但我试图在没有它的情况下做到这一点 LINQ在这种情况下似乎毫无用处 因为在query l
  • 使用正则表达式提取文件名

    如果我只想匹配fileName i e in C Directory FileName cs 以某种方式忽略之前的一切FileName cs使用正则表达式 我该怎么做 我需要这个用于我正在开发的编译用户界面 无法使用编程语言 因为它只接受正
  • 如何修复 React Native 中的“找不到模块”.../template.config”错误

    我正在尝试使用 React Native 创建一个新应用程序react native init MyApp但我收到了这个错误 Downloading template Copying template error Error Cannot
  • UISearchbar 不区分大小写?

    在表视图中 我设置了 UISearchBar 设置委托并添加协议 当用户点击一个单词时 一切正常 除了 网球 的搜索与 网球 不同 如何使搜索栏成为不区分大小写的 UISearchBar 这是我的代码 我认为所有事情都会发生 void se
  • 在 Visual Studio 中使用 NumPy

    我下载了http pytools codeplex com http pytools codeplex com Visual Studio 的 Python 工具 以便我可以在 Visual Studio 中编写 Python 问题是当我尝
  • python 中文本的 n 元语法

    我之前的更新post https stackoverflow com questions 49064114 extracting n grams from tweets in python 进行一些更改 假设我有 100 条推文 在这些推文