Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
 

Python特点
§  1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
§  2.易于阅读:Python代码定义的更清晰。
§  3.易于维护:Python的成功在于它的源代码是相当容易维护的。
§  4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
§  5.互动模式:互动模式的支持,您可以从终端输入并获得结果的语言,互动的测试和调试代码片断。
§  6.便携式:Python可以运行在多种硬件平台和所有平台上都具有相同的接口。
§  7.可扩展:可以添加低层次的模块到Python解释器。这些模块使程序员可以添加或定制自己的工具,更有效。
§  8.数据库:Python提供所有主要的商业数据库的接口。
§  9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
§  10.可扩展性:相比 shell 脚本,Python 提供了一个更好的结构,且支持大型程序。

什么是NLP?

自然语言处理(NLP)是关于开发能够理解人类语言的应用程序和服务。一些NLP的实际例子是语音识别,例如:谷歌语音搜索,了解内容是什么或情感分析等。

NLP

这些是自然语言处理(NLP)的一些成功实现:

搜索引擎,如谷歌,雅虎等。谷歌搜索引擎了解你是一个技术人员,所以它显示了与你相关的结果。

社交网站像Facebook新闻源一样提供。新闻Feed算法使用自然语言处理了解您的兴趣,并向您展示与其他帖子相关的广告和帖子。

语音引擎,Apple Siri等。

垃圾邮件过滤器, 现在垃圾邮件过滤器了解电子邮件内容中的内容,看看它是否是垃圾邮件。

如何使用Python开始使用NLP?

自然语言工具包(NLTK)是最受欢迎的自然语言处理库(NLP),它是用Python编写的,背后有一个很大的社区。

NLTK也很容易学习,它是您将使用的最简单的自然语言处理(NLP)库。

在这个NLP教程中,我们将使用Python NLTK库。

Python基础知识,在我开始安装NLTK之前,我假设您已经了解了一些。

安装nltk使用pip,如果您使用的是Windows或Linux或Mac,则可以安装NLTK :

$ pip install nltk

在撰写本文时,您可以在Python 2.7,3.4和3.5上使用NLTK。

要检查NLTK是否已正确安装,您可以打开python终端并键入以下内容:

导入nltk

如果一切顺利,这意味着您已成功安装NLTK库。

一旦安装了NLTK,就应该通过运行以下Python代码来安装NLTK软件包:

import nltk

nltk.download()

这将显示NLTK下载程序,以选择需要安装的软件包。

您可以安装所有包,因为它们的尺寸很小。

我们将学习如何识别网页在Python中使用NLTK的内容

首先,我们将抓取一个网页并分析文本以查看该页面的内容。

urllib模块将帮助我们抓取网页

import urllib.request

response = urllib.request.urlopen('https://en.wikipedia.org/wiki/SpaceX')

html = response.read()

print(html)

从链接可以清楚地看出,该页面是关于SpaceX的,现在让我们看看我们的代码是否能够正确识别页面的上下文。

Beautiful Soup

我们将使用这是一个Python库,用于从HTML和XML文件中提取数据。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'html5lib')

text = soup.get_text(strip = True)

print(text)

使用Python自然语言处理入门教程

你会得到一个像这样的输出

现在我们从已抓取的网页上获得了干净的文字,让我们将文本转换为tokens。

tokens = [t for t in text.split()]

print(tokens)

lambda

§ lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。它只是一个表达式,函数体比def简单很多。

§ 3个数求和的例子:

>>>f = lambda x,y,z:x+y+z

>>>f(1,2,3)

>>>6

§ 而如何要用正常函数实现上述功能的话,需要先用def定义函数名,代码如下:

>>>def f(x,y,z):

>>> return x+y+z

>>>n = f(1,2,3)

>>>6

filter()

§ filter()函数

§ 包括两个参数,分别是function和list。该函数根据function参数返回的结果是否为真来过滤list参数中的项,最后返回一个新列表,如下例所示:

>>>a=[1,2,3,4,5,6,7]

>>>b=filter(lambda x:x>5, a)

>>print b

>>>[6,7]

§ 如果filter参数值为None,就使用identity()函数,list参数中所有为假的元素都将被删除。如下所示:

>>>a=[0,1,2,3,4,5,6,7]

b=filter(None, a)

>>>print b

>>>[1,2,3,4,5,6,7]

§ map()函数

§ map()的两个参数一个是函数名,另一个是列表或元组。

>>>map(lambda x:x+3, a) #这里的a同上

>>>[3,4,5,6,7,8,9,10] #另一个例子

>>>a=[1,2,3] >>>b=[4,5,6]

>>>map(lambda x,y:x+y, a,b)

>>>[5,7,9]

§ 在刷题的过程中,map()函数通常可以结合输入一起使用,例如在一行中输入3个整数,可用如下语句:

a,b,c = map(int, input().split())

§ reduce()函数

§ reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

§ 例如,编写一个f函数,接收x和y,返回x和y的和:

def f(x, y):

return x + y

§ 调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

1. 先计算头两个元素:f(1, 3),结果为4;

2. 再把结果和第3个元素计算:f(4, 5),结果为9;

3. 再把结果和第4个元素计算:f(9, 7),结果为16;

4. 再把结果和第5个元素计算:f(16, 9),结果为25;

5. 由于没有更多的元素了,计算结束,返回结果25。

range()

§ range() 函数可创建一个整数列表,一般用在 for 循环中。语法如下:

§ range(start, stop, step)

§ 实例:

>>>range(10) # 从 0 开始到 10 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> range(1, 11) # 从 1 开始到 11 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> range(0, 30, 5) # 步长为 5 [0, 5, 10, 15, 20, 25]

>>> range(0, 10, 3) # 步长为 3 [0, 3, 6, 9]

>>> range(0, -10, -1) # 负数 [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

>>> range(0) []

>>> range(1, 0) []

§ range 在 for 中的使用:

for i in range(n): # 正序遍历,表示i的取值从0到n-1

for i in range(n,0,-1): # 倒序遍历,表示i的取值从n到1

dict字典

§ dict字典使用键-值(key-value)存储,具有极快的查找速度。在Java中也称为map。

§ 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:

names = ['Michael', 'Bob', 'Tracy']

scores = [95, 75, 85]

§ 给定一个名字,要查找对应的成绩,就先要在names中找到对应的位置,再从scores取出对应的成绩,list越长,耗时越长。

§ 如果用dict实现,只需要一个“名字”-“成绩”的对照表,直接根据名字查找成绩,无论这个表有多大,查找速度都不会变慢。用Python写一个dict如下:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}

>>> d['Michael'] 95

§ 我在刷题的时候,遇到一个问题就是需要在循环中动态往dict添加数据,但是没有找到添加的函数,其实不用插入函数,循环中动态往dict添加数据也很简单,如下所示:

dt = {} #先定义一个字典,注意是{},如果定义数组是[]

for i in range(n):

dt[key[i]] = value[i]

sort

§ sort参数说明

L.sort(cmp=None, key=None, reverse=False)

§ sorted参数说明

sorted(iterable, cmp=None, key=None, reverse=False)

§ iterable:是可迭代类型,通常为一个集合;

§ cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;

§ key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;

§ reverse:排序规则. reverse = True 表示降序 或者 reverse = False 表示升序,默认值为False。

§ 使用sort()方法对list排序会修改list本身,不会返回新list,使用方法如下:

my_list = [3, 5, 1, 4, 2]

my_list.sort()

print my_list

#输出:

[1, 2, 3, 4, 5]

§ 而使用sorted()方法排序时会返回一个新的list:

my_list = [3, 5, 1, 4, 2]

result = sorted(my_list) #返回一个新的list

print result

#输出:

[1, 2, 3, 4, 5]

常用的一些零散的小知识

§ 求实数的多少次幂

§ 正常在java和C语言中,求一个数的幂需要调用一个求幂的函数,但是Python中直接一个运算符就可以搞定了:

#Python求幂

10**2 #10的平方

10**4 #10的4次方

§ print(‘xx’,end=’’)中end问题

§ end是print()函数的一个参数。end 是输出语句结束以后附加的字符串,它的默认值是换行(’ ’)。如果输出的时候不需要换行需要显示的给end赋值。

§ 例如输出一个数组,每个数之间以空格隔开,可以用如下语句:

for i in range(n):

print(data[i],end=' ') #end值为空格

§ 如果只是单纯的想要输出不换行,可以令end='',end值为空字符串

§ // 与 / 的区别

§ “ / “ 表示浮点数除法,返回浮点结果;

§ “ // “ 表示整数除法,返回不大于结果的一个最大的整数

§ 【code】

print("6 // 4 = " + str(6 // 4))

print("6 / 4 =" + str(6 / 4))

§ 【result】

6 // 4 = 1

6 / 4 =1.5

§ 记得用set去除重复元素

§ 如果一个数组中有很多重复元素,根据需求需要去除重复元素的话,可以使用set集合,类似于Java的HashSet。

§ 语法很简单,只需一行代码就可以去重,如下所示:

§ 【code】

a = [1,1,2,2,3,4,5]

a = set(a) print(a)

§ 【result】

{1, 2, 3, 4, 5}
 

推荐内容

热点新闻