任务:从俄语文本中提取键表达式。 Python NLP

一开始需要的是:

  • 该程序从俄语的原始文本中“捕捞”特定行业中产品的唯一名称。 原始文本-一个人写的文本,仅表达他的思想而并不关心单词列表的形成或选择;
  • 自动获得的单词列表;
  • 最少的手动或自动处理,即可将列表转换为文本的一组标签或关键字。

我相信许多人每天都会在撰写或分析文章,帖子,评论,注释,报告等之后隐式面对这个问题。 因此,根据我的职业,我不得不每天多次处理此问题。 因此,可以说,从字面上讲“懒惰”使我想到了自动化的想法。

现在,当我写这篇文章时,这个想法已经保留,但是最终结果的数据集已经发生了很大变化:

  • 不是选择单词,而是选择关键短语,包括单词;
  • 键表达式列表用16个不同的标记标记;
  • 文本中的所有单词(包括非关键单词)都经过了词形修饰-以初始形式给出或以显示格式统一显示;
  • 文本中的每个单词都有与文本位置和重复次数相关的其他分析。

Nrlpk (通过按键进行自然俄语处理)软件结果可为以下各项准备数据:

  • 分析无限范围的主题和行业的文本(开发和测试是基于工业和军工复合材料-军事工业园区);
  • 材料的自动分类,分类,分类,物化(在线站点);
  • 使用系统响应设置(安全服务和闭环或在线系统)按内容监视和过滤;
  • 多层文本标记(AI)。

质素


为了不贯穿整篇文章,那些只相信数字而不相信语言的人以及那些期望绝对质量并且不接受其他人的人...

在不超过3,500字的文章上进行测试时样本的质量在95-100%的范围内。 分散与演示的质量和复杂性有关。 这是参与测试的文章之一的示例,这是其自动分析结果

必须从获得的质量间隔中删除大约7-10%,即 实际质量水平可能会达到85-93%。 这是由于以下事实:

  • 在测试过程中,所选数据的需求发生了变化,我以前没有注意到,并且我认为现在没有注意到所有信息;
  • 在手动进行和解时,我有一个主观意见,即什么可以正确地识别为文章中的键,哪些不可以被识别为键,并​​且很可能与文章作者的观点不符。

可以在GitHub上找到经过测试的文章的完整列表以及结果的详细统计信息。

可以在GitHub上的Reasons文件中找到具体影响每篇文章的结果质量的因素。

如何读取结果


在要分析的特定文章的每个文件夹中,有5个文件和Unicode数据集:

  1. words.csv-相关单词的列表,包括未识别单词的列表;
  2. keys.csv-关键字列表,现在除了标记的表达式外,还包含在文本中重复至少指定次数的单词-在这种情况下,至少重复4次;
  3. trash.csv-未识别单词的列表;
  4. descr_words.csv-文本中所有单词的列表的描述(统计信息);
  5. descr_keys.csv-关键字列表的描述(统计信息);

原因_quality.txt是文章的(可选)表达式的列表,这些表达式是手动选择的并且丢失了关键字或错误输入的(根据作者nrlpk)。

您可以学习如何从GitHub上的Legend文件中读取这些文件。

nrlpk允许您以下列格式之一获取任何数据集:

  • 熊猫数据框(默认);
  • Python字典;
  • JSON格式
  • CSV档案。

测试方法


  1. 软件(自动)文本分析。
  2. 手动(肉眼)识别,手动(标记)键表达式以及对接收到的键表达式列表进行核对,并自动接收列表。
  3. 质量百分比的计算:缺少表达式或拼写错误的数量+垃圾中的单词数,占文本中单词总数的百分比

工具


nrlpk是用Python 3.7.0编写的。 在开发未来的nrlpk软件的过程中,出现了两个强制性要求:

  • 选择表达方式,而不是单词-包括单词;
  • 专业行业术语词典的存在。

这些要求使人们对使用NLTK和pymorphy2提出质疑,这可以解决一些挑战。

为消除疑虑,我们从媒体中精选了一些文字,这些文字取材自最大的俄文新闻聚合商,主题是军工联合体-VPK.Name 。 标签分析显示:

  • 不应接受逐字标记和词形化处理的整个数据层;
  • 在很多情况下,根据句子进行标记化的可能性不可能对文本进行严重的转换,以纠正作者在80%以上的文章中所允许的语法错误。 这些不准确性绝不会影响一个人对文本的感知,但是会极大地影响机器对这些文本的感知和解释。

另外,已经在这个阶段,收集和存储有关被处理对象的各种统计信息的需求变得显而易见。

考虑到这些因素, Pandas被选为处理数据的基本程序包,除了上述任务外,它还可以执行批量定形。

在分析了可用的俄语词典之后,以OpenCorpora为基础,顺便说一下,它也用于pymorphy2中。
它进行了转换,成为方便与熊猫一起使用的形式,然后从中选择了以下字典:

  • 大-整个单词基础;
  • 坏词-由于缺乏意义而被排除在文本分析之外的词;
  • special-特殊(行业)单词词典。 专有名词不包括在词典中:名称,名称,姓氏,地址,产品,产品,公司,人员等。 这是一项基本而明智的决定,因为在任何生活行业/方向上,这种方法都需要不断监控和手动添加字典,这破坏了通过自动化促进劳动的想法;

字典以简单文本格式保存unicode,以便从任何外部程序进行管理。

由于nrlpk和pymorphy2中词典的基础是相同的,因此语音部分(语法)的名称也相同。 目前,标记(非标准语法)的数量为16,并且如果标记的表达式不包含多个单词,则除标记之外,大多数标记还具有基本语法的语音部分的名称。 pymorphy2的匹配标记(非标准克)的名称相同,尤其是:

  • NUMB是一个数字;
  • ROMN是罗马数字;
  • UNKN-无法解析令牌。

顺便说一下,对于包含数值数据的表达式,除了NUMB和ROMN外,还使用了nrlpk,还使用了以下标记:

  • NUSR-表达式包含一个或多个数字数据;
  • 数学-表达式包含一个数学公式。

什么是多字关键字表达? 例如,NUSR:

  • 如果文本是2020年2月25日,则关键表达式将是2020年2月25日,并带有词条“ 02.25.2020”,语法“ NUSR”和标记NUSR;
  • 但是,如果文本显示为“ 2020年2月25日”,则关键表达式将为“ 2020年2月25日”,并带有词条“ 2f2g”,语法“ WIQM”和标记WIQM;
  • 如果文本中有25吨,则在密钥中我们将看到“ 25吨”,带有词条“ 2t”,其中“ NUSR”也将用作语法和标记。

为什么需要对单词和键进行描述


首先,有必要检查nrlpk算法的操作-单词是否丢失,是否存在不必要的联合,文本中键的比例等。

但是随着软件的调试,一些“规则”开始出现,作为一项任务的识别并没有对nrlpk构成:

  • 识别有拼写错误的单词;
  • 识别不良样式的文本,不良率> 35%(测试的实践观察);
  • 识别目标文本(近距离聚焦,清晰定位)-skeys-%<5,没有数字键(测试的实践观察);
  • 识别不受行业主题约束的文本-skeys-%<1。

对统计指标相互组合的分析同样会引起人们的兴趣,例如:

  • 识别“宽范围”的文本-keys-%> 45%,而ukeys-%倾向于key-%。

为什么都写


nrlpk处于准备使用当前质量指标来处理俄语文本的状态,但未作为服务提供。 作者对提高质量百分比并稳定该百分比具有明确且可理解的发展方向。 为了完成此任务,需要战略投资者和/或新的版权持有人为将项目进一步开发到既定目标做好准备。

聚苯乙烯


nrlpk使用以下参数自动生成此文本的标签(初始-在Habré上有一些更改),如下所示:

  • 不要将带有数字数据的表达式识别为键;
  • 将文本中至少重复8次的单词识别为键。

有关本文nrlpk处理结果的详细数据可以在GitHub上找到

发表者: avl33

Source: https://habr.com/ru/post/zh-CN468141/


All Articles