Python提取字母,python提取英文字符串中的字母

  Python提取字母,python提取英文字符串中的字母

  本文将一步步向您展示如何使用Python从中文文本中提取关键词。如果需要“看提纲”一篇长文,可以试试。

  2017-12-07-20-38-22-7-426487.png

  要求

  最近朋友对自然语言处理感兴趣,因为他打算用自动化的方法从长文本中提取关键词来确定话题。

  他问我方法,我推荐他看我的文章《如何用Python从海量文本提取主题?》。

  他看了之后说很有收获,但是应用场景和自己的需求有些出入。

  文章755-79000面对大量文档,利用话题发现功能对文章进行聚类。但是他不需要处理很多文档,也不需要聚类,但是他需要处理的每个文档都很长。他希望用自动的方法从长文本中提取关键词,从而得到一个大概的想法。

  突然发现之前忘了写一篇文字,介绍单个文字关键词的提取方法。

  虽然这个功能实现起来并不复杂,但是其中也有一些需要避免的坑。

  通过这篇文章,我将一步步向你展示如何使用Python来实现中文关键词抽取的功能。

  环境

  计算机编程语言

  第一步是安装Python运行时环境。我们使用集成环境Anaconda。

  请到这个网站下载Anaconda的最新版本。下拉页面,找到下载位置。根据你目前使用的系统,网站会自动推荐合适的版本给你下载。我用的是macOS,下载文件格式是pkg。

  2017-12-03-22-19-31-2-856072.png

  Python版在下载页面区域的左侧,2.7版在右侧。请选择版本2.7。

  双击下载的pkg文件,按照中文提示一步一步安装。

  2017-12-03-22-19-31-2-856170.jpeg

  样品

  我特意为你准备了一个github项目,用来存储本文的支持源代码和数据。请从这个地址下载压缩包文件,然后解压缩。

  解压后的目录名为demo-keyword-extraction-master,样例目录包含以下内容:

  2017-12-7 _ 21-24-56 _快照-01.jpg

  除了github项目默认的指令文件README.md,目录中还有两个文件,分别是数据文件sample.txt和程序源代码文件demo-extract-keyword.ipynb。

  绊脚石分词

  我们用的关键词提取工具是口吃。

  在之前的文章《如何用Python从海量文本提取主题?》中,我们用这个工具对中文句子进行了切分。我们这次用的是它的另一个功能,即关键词提取。

  请进入终端,使用cd命令进入解压文件夹demo-keyword-extraction-master,输入以下命令:

  pip安装街霸

  好了,打包工具准备好了。下面我们来执行一下。

  jupyter笔记本

  进入Jupyter笔记本环境。

  image.png

  这里,环境已经准备好了。下面介绍一下本文使用的中文文本数据。

  数据

  起初,我担心找不到现成的中文文本。

  互联网上有大量的中文文本。

  但我不确定用来演示会不会有版权问题。万一有人的作品被分析,人们可能会问,‘你从哪里得到这个电子版的?"

  万一再打官司,我就受不了了。

  后来发现,我根本就是在自找麻烦。为什么我会发现别人的短信?你为什么不用我自己的?

  一年来,我写了90多篇文章,总字数超过27万。

  image.png

  我特意找了一个非技术性的,避免提取的关键词都是Python命令。

  我选的是去年的文章《如何用Python做中文分词?》。

  image.png

  这篇文章讲了一些有趣的小故事。

  我从网页中提取了文本并存储在sample.txt中

  注意这是一个容易踩坑的地方。在暑期的一次工作坊教学中,有几个学生因为从网上检索中文文本出现问题而卡了很久。

  这是因为,与英语不同,汉字有编码问题。不同的系统有不同的默认代码,不同版本的Python接受不同的代码。您从互联网上下载的文本文件可能与您的系统编码不一致。

  image.png

  在任何情况下,这些因素都可能导致你打开的文本中到处都是难以辨认的代码。

  所以中文文本数据的正确使用方法是在Jupyter笔记本中新建一个文本文件。

  image.png

  然后,将出现以下空白文件。

  image.png

  用任何可以正常显示的编辑器打开你从其他地方下载的文本,然后将所有内容复制粘贴到这个空白文本文件中,这样可以避免编码混乱。

  避开这个坑可以省去你很多不必要的尝试麻烦。

  好了,现在知道这一招了,可以愉快地提取关键词了。

  执行

  回到Jupyter笔记本主界面,点击demo-extract-keyword.ipynb,就可以看到源代码了。

  image.png

  是的,你是对的。只需要这短短的四句话,就可以用两种不同的方式(TF-idf和TextRank)完成关键词提取。

  在这一部分,我们将首先解释执行步骤。后面我们会介绍不同关键词提取方法的原理。

  首先,我们从口吃分词的分析工具箱中导入所有的关键词提取功能。

  来自jieba.analyse import *

  在相应的语句上,按Shift Enter组合键执行语句并获得结果。

  然后,让Python打开我们的示例文本文件,并将其所有内容读入数据变量。

  用open(sample.txt )作为f:

  data=f.read()

  用TF-idf提取关键词和权重,依次显示。如果没有指定任何内容,默认显示的数字是20个关键字。

  对于关键字,extract_tags中的权重(data,withWeight=True):

  打印( %s %s %(关键字,权重))

  在显示内容之前,会有一些提示。别管它。

  从默认字典构建前缀字典.

  从缓存/var/folders/8s/k8yr 4 zy 52 q1dh 107 gjx 280 MW 0000 gn/T/jieba . cache加载模型

  加载模型花费了0.547秒。

  前缀字典已成功构建。

  然后名单出来了:

  优步0.20058686881

  驱动程序0.119951947597

  乘客0。59860 . 68888888861

  主人,0。59860 . 68888888861

  井然有序的天空0 . 48860 . 48888888861

  目的地0.5800000000001

  在网上,大约是0。48660 . 66868686861

  姐妹,0.5 . 50000000001

  自我-0 . 20000 . 00000000001

  上公共汽车0.00000000001

  工作0.500000000001

  中国天津市天津市。38660.88868888686

  10 0.0526641740216

  打开优步0.40000000001

  事物0 . 50000 . 38686886861

  李师傅0.40000000001

  天津人是0.5%。50600.86868686861

  绕道走!40800.000000000005

  出租车:0.40000000001

  时间为0.04482985881

  我看了一下,觉得关键词提取比较靠谱。当然,有个数字10混在里面,但无伤大雅。

  如果需要修改关键字的数量,需要指定topK参数。例如,如果您想输出10个关键字,可以这样执行:

  对于关键字,extract_tags中的权重(data,topK=10,withWeight=True):

  打印( %s %s %(关键字,权重))

  我们试试另一种关键词提取方法,——TextRank。

  对于关键字,textrank中的权重(data,withWeight=True):

  打印( %s %s %(关键字,权重))

  关键词提取结果如下:

  优步1.0

  司机:0。59860 . 68868886861

  乘客:0。50000 . 00000000001

  姐妹,0.40000000001

  天津0.451349366

  目的地0.400000000005

  时间0.4188386363365

  作者0.40586868686

  编号0.357764515052

  工作0 . 56867 . 88888888681

  上公共汽车0。58860 . 68868888861

  绕道而行0 . 54860 . 38686868661

  转载0.271932903186

  出来0 . 20460 . 386888868675

  租金0.386988991

  事物0 . 56860 . 88888888881

  单数0.213450680366

  出租车:0.2049665481

  拉着门0 . 54850 . 58686868661

  接下来是0.20513470986

  请注意,此提取的结果不同于TF-idf的结果。至少,突兀的‘10’没有了。

  但是,这是否意味着TextRank方法一定优于TF-idf?

  这个问题留作思考题,希望你在认真看完下面的原理部分后能独立回答。

  如果只需要应用这种方法解决实际问题,请跳过原理部分,直接进入讨论。

  原则

  先简单解释一下前面出现的——TF-idf和TextRank两种不同的关键词提取方法的基本原理。

  为了不让大家觉得无聊,这里就不用数学公式了。稍后我会给出相关的信息链接。如果对细节感兴趣,欢迎大家按图索骥,咨询学习。

  先说TF-idf。

  它的全称是词频——逆文档频。中间有连字符,左右两边有部分,组合在一起决定一个词的重要程度。

  第一部分是词频,也就是某个词出现的频率。

  我们常说‘重要的事情说三遍’。

  同理,某个词出现的次数说明这个词的重要性可能很高。

  但是,这只是一种可能性,不是绝对的。

  例如,现代汉语中的许多虚词,如的,的,的,以及古代汉语中的许多尾词,如之,乎,者,也,,可能在文本中出现多次,但它们显然不是关键词。

  这就是为什么我们在判断关键词的时候需要第二部分(idf)的配合。

  逆文档频率首先计算一个词在每个文档中出现的频率。假设有10个文档,其中一个单词A在所有10篇文章中首先出现,另一个单词B只在3篇文章中出现。请问哪个词比较关键?

  给你一分钟考虑一下,然后继续读下去。

  是时候公布答案了。

  答案是B更关键。

  a可以是虚词,也可以是所有文档共享的主题词。b只出现在三个文档中,所以很可能是关键词。

  逆文档频率取此文档频率的倒数。使得第一部分和第二部分尽可能高。两者都高,所以很可能是关键词。

  TF-idf完了。再来说说TextRank。

  与TF-idf相比,TextRank更加复杂。它不是简单的加减乘除运算,而是基于图形的计算。

  下图是原始文献中的一个例子。

  image.png

  TextRank会先提取单词,形成节点;然后,根据单词的联想,建立链接。

  根据连接节点的数量,每个节点被赋予一个初始权重值。

  然后开始迭代。

  根据连接到一个单词的所有单词的权重,重新计算该单词的权重,然后传递重新计算的权重。在这种变化达到平衡状态之前,权重值不再变化。这和Google的网页排名算法PageRank在思想上是一致的。

  image.png

  根据最终权重值,取前几个词作为关键词提取结果。

  如果您对原始文献感兴趣,请参考以下链接:

  讨论

  综上所述,本文讨论了如何使用Python从中文文本中抽取关键词。具体来说,我们分别使用TF-idf和TextRank方法,两者之间的关键词提取结果可能会有所不同。

  你做过中文关键词抽取吗?用什么工具?它是如何工作的?有没有比这篇文章更高效的方法?请留言,把你的经验和想法分享给大家,我们一起交流探讨。

  请喜欢。也可以在微信关注并置顶我的微信官方账号‘nkwangshuyi’。

  如果你对数据科学感兴趣,不妨看看我的系列教程索引贴《网约车司机二三事》,里面有更多有趣的问题和解决方法。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: