搜索令牌出现的上下文

contextSearching的Python项目详细描述


简介

给定一个单词标记和一个单词出现的语料库,这个包可以帮助您找到并分析单词出现的上下文。可以很容易地利用它来改进基于单词的分析。在

安装

pip install contextSearching

使用

作为一个例子来说明这个用法,我们选择了术语“break”和Amazon review语料库for Nintendo Switch,其中人们使用了“break”。在

从一个简单的词袋分析,我们知道,每当人们提到“打破”,该产品很可能获得低星级评级。但我们不知道什么是中断,也不知道“中断”的其他上下文

准备

^{pr2}$

加载包并初始化类

"""Loading the package and initialize the class"""fromcontextSearchingimportcontext_searchingcs=context_searching(target_token=target,doc=corpus['reviews'],left_window=5,right_window=5,padding_token="_empty_")

除了目标标记和语料库外,该类还需要三个输入:左/右窗口和填充标记。在

该算法接收目标令牌并积极收集指定窗口内的所有单词。在

例如,当left_window设置为10时,它将在语料库的每个文档中找到目标标记,然后收集目标左侧的所有10个单词,记录相对位置。如果左边少于10个单词,则算法将在单词列表中添加填充标记。在

获取上下文探测矩阵

"""Get the Context Probing Matrix"""# Get a list of stopwordsfromgensim.parsing.preprocessingimportSTOPWORDSstopwords=list(STOPWORDS)contextPMat=cs.get_context_prob_matrix(stop_words=stopwords,lemmatize=True,stem=False)

假设语料库中有N个文档,左窗和右窗设置为5。上下文探测矩阵(CPM)是一个N×11矩阵,如下所示:

# We can examine the actual CPM like this:cpm_df=pd.DataFrame(np.array(contextPMat.context_prob_matrix))cpm_df.columns=[str(x)forxincontextPMat.position_idx]cpm_df.head()

列索引指示相对位置。例如,在第一个文档中,单词“button”出现在目标术语“break”右侧的两个单词。在

获取词汇词典

"""Get the vocabs dictionary"""contextPMat.vocabs['joycon']
[-1, -1, -4, -2, -2, -1, -2, 1]

vocabs是一个字典,它的键是构造CPM时收集的唯一标记,值是记录的与目标标记相对位置的列表。在

在上面的输出中,我们看到术语“joycon”在目标项的+-5窗口内总共出现了8次。它最常出现在目标词的左边。在

获取每个术语的统计表

"""Get the statistics table for each term"""cpm_stats=contextPMat.get_cpm_stats_tb()cpm_stats.cpm_stats_tb.head()

为了理解上下文,我们可以查看上面收集的每个术语的相对位置的统计数据。在

例如

当一个术语出现率很高时,我们知道它总是出现在目标令牌周围

当一个项的相对位置的方差较低时,我们知道它总是出现在相同的相对位置

推断含有目标项

"""Infer potential N-grams containing the term"""cpm_stats.guess_ngram(n=5)

根据统计表,该算法可以推断出包含目标项的最有可能的n元

例如,当我们想推断单词最有可能出现在“break”的左边(即相对位置=-1)时,我们要执行以下步骤

  1. 从上述CPM构建过程中收集的单词开始(例如“controller”)
  2. 换句话说,取观察到的相对位置的平均值,减去-1的平均值,然后取绝对值
  3. 换句话说,取观察到的相对位置的中间值,减去中间值-1,然后取绝对值
  4. 计算1/计数
  5. 计算单词相对位置的方差
  6. 在所有收集到的单词上重复上述步骤,并获得上述4个指标列表(abs中值差异、abs平均差异、1/count、variance)
  7. 规范化4个列表
  8. 对于每个收集到的单词,用用户定义的权重乘以它的4个指标,然后取总和得到最终得分

位置-1的最佳候选词的最终得分最小。在

当我们想找到最有可能的三元图时,算法考虑在每个可能的位置都有一个目标标记的三元图。因此,在上面的示例输出中,目标术语“break”出现为第5、第4、第3,n元上的第2项和第1项。在

现在我们得到了更多关于“中断”的上下文:

昂贵的Joycon控制器在数月内坏掉似乎是个问题。在

一些注意事项

  1. 目前,当目标术语在一个文档中出现多次时,CPM只考虑第一个。我会在不久的将来改善这一点

  2. 当我们有更多的文档而每个文档都很短时,这种方法效果更好。例如,它在收集新闻文章时不会起到很好的作用。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java广播接收器未检测到按键事件   java不为特定列更改创建修订   java采用了更实用的方法   java桌面窗格HTML呈现   java处理internet连接丢失   java在调整JFrame的大小时,如何防止JTable的列调整大小?   如何用Java中的“Scanner.hasNext”完成程序   具有模块名称的java停止IntelliJ项目工具窗口?   执行已编译的Rails-Warbler JAR文件时发生java加载错误   java Spring数据redis存储库不支持集合查询?   每个客户端的java队列请求   获取Java中的JSON嵌套数组元素   java GWT,Vaadin ConcurrentModificationException   firebase存储中的java在保存照片之前,我需要发送两次照片   JavaSpringEleaf如何在容器外使用变量