查看原文
其他

word_in_context | 查看某类词的上下文,更好的理解文本数据

大邓 大邓和他的Python
2024-09-09

Firth(1957)有一句名言,理解一个词要从ta身边入手。

You shall know a word by the company it keeps

通过一个单词所处的语境,我们可以了解该单词的含义。该谚语源于英国语言学家 J.R. Firth 的理论,他认为单词的含义是由其周围的语境和与之相伴的其他单词所决定的,因此我们需要通过单词出现的上下文来理解其含义。这一理论在语言学、自然语言处理等领域有着广泛的应用之前分享过

 使用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标」 

使用的是正则表达式识别融资约束文本。但是正则表达式设计十分复杂且有难度,在此之前,如果能够查看某些融资关键词附近上下文, 可帮助研究者更全面地了解数据集中关键词的使用情况和语境,更好的设计正则表达式,亦或许意外找出新的有价值的线索。



代码

import jieba
import re
from nltk.tokenize import word_tokenize
import pandas as pd
import warnings

def word_in_context(text, keywords, window=3, lang='chinese'):
    """
    Given text and keywords, the task is to find the text where the keyword appears
    Args:
        text (str): input document, string format
        keywords (list): keywords
        window (int): return the text where the keyword appears, default is 3, meaning return 3 word.
        lang (str, optional): setting the lang, only support chinese and english. Defaults to 'chinese'.

    Returns:
        list contains multiple dictionaries, where each dictionary contains the sentence, keyword, and the sentence where the keyword appears
    """

    if lang=='chinese':
        words = jieba.lcut(text.lower())
    else:
        try:
            words = word_tokenize(text.lower())
        except:
            warnings.warn("你应该安装nltk和对应的nltk_data, 请看B站https://www.bilibili.com/video/BV14A411i7DB")
            words = text.lower().split(' ')
    keywords = [w.lower() for w in keywords]
    kw_idxss = [[i for i, x in enumerate(words) if x == keyword] for keyword in keywords]
    rows = []
    for keyword, kw_idxs in zip(keywords, kw_idxss):
        for idx in kw_idxs:
            half = int((window-1)/2)
            start = max(0, idx - half)
            end = min(len(words), idx + half + 1)
            row = {'keyword': keyword, 
                   'context'''.join(words[start: end]) if lang=='chinese' else ' '.join(words[start: end])
                      }
            rows.append(row)
    df = pd.DataFrame(rows)
    return df



练习

#测试代码,假设zh_text是年报文本,从找找出丝网词相关词的上下文
zh_text = """
【插入一条自家广告】大邓自己家的家,
安平县多隆丝网制品,生产销售不锈钢轧花网、
电焊网、石笼网、刀片刺绳、冲孔网等丝网制品。
联系人 邓颖静 0318-7686899

人生苦短,我学Python
在社科中,可以用Python做文本分析
Python是一门功能强大的编程语言,广泛应用在经管社科领域。
可以做网络爬虫、文本分析、LDA话题模型、相似度分析等。

今年经济不景气,形势异常严峻。
由于疫情不景气,静默管理, 产品积压, 公司经营困难。
保就业促就业,任务十分艰巨。
"""


#【产品词】上下文
word_in_context(text = zh_text, 
                keywords = ['石笼'], 
                window=10
                lang='chinese')

keywordcontext
0石笼、\n电焊网、石笼网、刀片刺绳

#【经营】上下文
word_in_context(text = zh_text, 
                keywords = ['经营'], 
                window=10
                lang='chinese')

keywordcontext
0经营积压, 公司经营困难。\n保

#【Python】上下文
word_in_context(text = zh_text, 
                keywords = ['python'], 
                window=10
                lang='chinese')

keywordcontext
0python人生苦短,我学python\n在社科中
1python中,可以用python做文本分析\n
2python做文本分析\npython是一门功能强大的


精选文章

管理世界 | 使用文本分析词构建并测量短视主义

管理世界 | 使用 经营讨论与分析 测量 企业数字化指标

管理世界 | 用正则表达式、文本向量化、线性回归算法从md&a数据中计算 「企业融资约束指标

可视化 | 词嵌入模型用于计算社科领域刻板印象等信息(含代码)

可视化 | 绘制《三体》人物关系网络图

可视化 | 使用决策树分析小红书帖子数据(含代码)

转载 | 基于词嵌入技术的心理学研究: 方法及应用

赶快收藏 | 社会科学文本挖掘技术资料汇总

B站社会科学文本分析视频合集

词嵌入技术在社会科学领域进行数据挖掘常见39个FAQ汇总

文本分析 | 中国企业高管团队创新注意力(含代码)

文本分析 | MD&A 信息含量指标构建代码实现

金融研究 | 使用Python构建「关键审计事项信息含量」

金融研究 | 文本相似度计算与可视化

转载 | 社会计算驱动的社会科学研究方法

推荐 | 社科(经管)文本分析快速指南

视频分享 | 文本分析在经管研究中的应用

转载 | 金融学文本大数据挖掘方法与研究进展

转载 | 大数据驱动的「社会经济地位」分析研究综述

使用 Word2Vec 和 TF-IDF 计算五类企业文化

如何用「图嵌入」将企业、高管职业经历表征为向量数据

JM2022综述 | 黄金领域: 为营销研究(新洞察)采集网络数据

MS | 使用网络算法识别创新的颠覆性与否

认知的测量 | 向量距离vs语义投影

Asent库 | 英文文本数据情感分析

PNAS | 文本网络分析&文化桥梁Python代码实现

PNAS | 使用语义距离测量一个人的创新力(发散思维)得分

PNAS | 历史文本中的语言积极性反映了动态的环境和心理因素(含Python代码)

tomotopy | 速度最快的LDA主题模型

数据集 | cctv新闻联播文稿数据

数据集 | 睡前消息文稿数据集

EDGAR | 25年数据的预训练词向量模型(含代码)

2G数据集 | 80w知乎用户问答数据

采购合同数据集 | 政府采购何以牵动企业创新

借助chatGPT更高效地学习Python文本分析

继续滑动看下一个
大邓和他的Python
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存