《Python自然語言處理》學習筆記 第四章

2021-08-06 00:02:09 字數 3355 閱讀 1604

4.1 回到基礎

賦值

(1)對於結構化物件,如鍊表,其賦值實際上是乙個物件的引用。因此在使用與該物件相關的變數修改鍊錶時,所有變數的值都會變化。

(2)關鍵是要明白通過乙個物件引用修改乙個物件與通過覆蓋乙個物件引用之間的區別。

(3)複製結構,而不複製任何物件引用使用copy.deepcopy()。需要import copy。

等式

(1)is操作符測試是否為同乙個物件。

(2)==關係操作符判斷的只是物件的型別和值是否一致,而is是判斷是否為同乙個物件。

條件語句

(1)在if語句的條件部分,乙個非空字串或鍊錶被判定為真,而乙個空字串或鍊錶判定為假。

(2)all()函式和any()函式可以應用到乙個鍊錶(或其他序列),來檢查是否全部或任一專案滿足一些條件。

4.2 序列

元組序列

(1)元組序列由逗號操作符構造,而且通常使用括號括起來。

序列型別上的操作

(1)可以在這些序列型別之間相互轉換。

(2)tuple(s)將任何種類的序列轉換成乙個元組。

(3)list(s)將任何種類的序列轉換成乙個鍊錶。

(4)使用join()函式將乙個字串鍊錶轉換成單獨的字串。

(5)freqdist物件也可以使用list()函式轉換成乙個序列,且支援迭代。

(6)zip()函式取兩個或兩個以上的序列中的專案,將它們「壓縮」打包成單個的配對鍊錶。

(7)給定乙個序列s,enumerate(s)返回乙個包含索引和索引處專案的配對。

(8)可以指定想要分割資料的位置。

合併不同型別的序列

(1)下劃線只是乙個普通的python變數,我們約定可以用下劃線表示我們不會使用其值的變數。

(2)乙個鍊錶是乙個典型的具有相同型別的物件序列,它的長度是任意的。

(3)乙個元組通常是不同型別的物件的集合,長度固定。經常用乙個元組來儲存乙個記錄:與一些實體相關的不同欄位的集合。

(4)在python中,列表是可變的,而元組是不可變的。也就是說,列表可以被修改,而元組不能被修改。

產生器表示式

(1)使用列表推導的好處在於,用它處理文字結構緊湊和可讀性好。

(2)將列表推導插入到一些函式呼叫中時,如果不加方括號可以構成乙個產生器表示式,比起加了方括號,產生器表示式會更高效。

4.3 風格問題

python**風格

(1)**布局中每個縮排級別應使用4個空格。避免使用tab縮排,因為它可能由於不同的文字編輯器的不同解釋而產生混亂。

(2)每行應少於80個字元長,如果必要的話,你可以在圓括號、方括號或花括號內換行,因為python能夠探測到該行與下一行是連續的。

(3)如果你需要在圓括號、方括號或大括號中換行,通常可以新增額外的括號,也可以在行尾需要換行的地方新增乙個反斜槓。

過程風格與宣告風格

計數器的一些合理用途

4.4 函式:結構化程式設計的基礎

函式的輸入和輸出

(1)使用函式的引數傳遞資訊給函式,引數是括號括起的變數和常量列表,在函式定義中跟函式名稱之後。

(2)函式通常會通過return語句將其結果返回給呼叫它的程式。

(3)一般情況下,函式應該修改引數的內容或返回乙個值,而不是兩個都做。

引數傳遞

(1)需要理解python的按值傳遞引數和按引用傳遞引數的區別。

(2)可以使用id()函式和is操作符來檢查每個語句執行之後物件識別符號是否發生變化。

變數的作用域

(1)名稱解析的lgb規則:先本地(local),再全域性(global),後內建(built-in)。

引數型別檢查

(1)可以使用assert來判斷某個條件是否成立,如果assert語句失敗,將會產生乙個不可忽視的錯誤而停止程式執行。這是一種防禦性程式設計。

功能分解

文件說明函式

(1)docstring應該用乙個三重引號引起來。

(2)docstring中可以包括乙個doctest塊,說明使用的函式和預期的輸出。這些都可以使用python的docutils模組自動測試。

(3)docstring中應當記錄函式的每個引數的型別和返回型別。

4.5 更多關於函式

作為引數的函式

(1)python提供了更多的方式來定義函式作為其它函式的引數,即所謂的lambda表示式。

累計函式

(1)使用yield語句可以使原本返回乙個序列的函式變成乙個生成器,使得程式更加高效。

高階函式

引數的命名

(1)我們可以i通過名字引用引數,甚至可以給它們分配預設值以供呼叫程式沒有提供該引數時使用。這些引數被稱為關鍵字引數。

(2)如果將關鍵字引數和非關鍵字引數混合使用的話,必須確保未命名的引數在命名的引數前面。因為未命名引數是根據位置來定義的。

(3)我們可以定義乙個函式,接受任意數量的未命名和命名引數,並通過乙個引數鍊錶*args和乙個關鍵字引數字典**kwargs來訪問它們。

(4)當*args作為函式引數時,它實際上對應函式所有的未命名引數。

(5)注意不要使用可變物件作為引數的預設值。

4.6 程式開發

python模組的結構

(1)程式模組的目的是把邏輯上相關的定義和函式結合在一起,以方便重用和更高層次的抽象。

(2)乙個模組可以包含用於建立和操縱一種特定資料結構的**或者執行特定的處理任務。

(3)可以使用變數__file__定位你的系統中任一nltk模組的**。

(4)模組的一些變數和函式僅用於模組內部,它們的名字應該以下劃線開頭,這些名稱將不會被匯入。

(5)可以選擇性地列出乙個模組的外部可訪問的名稱,使用乙個特殊的內建變數:__all__= [『edit_distance』, 『jaccard_distance』]

多模組程式

自然語言處理學習記錄

v set text1 long words w for w in v if len w 15 找出長度大於7並且出現頻率大於7的單詞 fdisi5 freqdist text5 sorted w for w in set text5 if len w 7 and fdist5 w 7 檢視文字中詞...

《Python自然語言處理》學習筆記(二)

今天的內容涉及對語言簡單的統計和python基本控制流程 if,for 一.計算語言 1.頻率分布 freqdist函式 需要乙個文字作為引數,返回一組鍵值對,鍵是單詞,值時單詞在文中出現的次數。fdist1 freqdist text1 plot函式 通過引數,可以繪製單詞的頻率圖,或者累積頻數圖...

python自然語言處理學習資源彙總

2017.4.18更新 因為pypi的官網並不全。並不全。不全。抑或是並沒有上面這個鏈結這麼使用方便 一目了然導致我找不到 原文 1.nltk 命令 pip install nltk 2.numpy 命令 pip install numpy 3.一不留神下下來五個包,是被 安裝了麼。本來只想下mat...