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)
你會得到一個像這樣的輸出
現在我們從已抓取的網頁上獲得了干凈的文字,讓我們將文本轉換為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}
關鍵詞: Python