Python 統(tǒng)計(jì)托福作文詞頻

隨著 AI 的大熱祈搜,我的好奇心也受到了吸引缕减。閱讀了一些文章后發(fā)現(xiàn)庭再,Pyhton 是一個非常適合 AI 編程的語言捞奕。于是開始了對其打怪升級的探索。

探索中發(fā)現(xiàn)拄轻,Python 提供豐富的庫來幫助開發(fā)者們進(jìn)行數(shù)據(jù)分析颅围。自己由于工作需要,正好在準(zhǔn)備托福寫作恨搓。于是院促,當(dāng) Python 遇上 Tofel,一場美麗的邂逅便展開了斧抱。

目標(biāo)

筆者完成了 5 篇托福作文后常拓,想分析一下哪些詞是我最常用的,進(jìn)而學(xué)習(xí)這些詞的同義詞辉浦,擴(kuò)大詞匯量弄抬,然后在作文中自由替換。

思路

  1. 利用 Python 讀取文件
  2. 統(tǒng)計(jì)每篇文章的詞頻
  3. 合并 5 篇文章的詞頻
  4. 輸出前 10 詞頻的單詞

行動

STEP 1:

導(dǎo)出作文

筆者使用 Evernote 進(jìn)行寫作宪郊,其支持導(dǎo)出 hmtl 格式文件掂恕。導(dǎo)出后,重命名文件方便讀取废膘。

重命名

STEP 2:

通過分析 html 文件竹海,我發(fā)現(xiàn)正文都在 <body> 中。通過查詢丐黄,發(fā)現(xiàn) BeautifulSoup 庫可以幫助處理 html 格式文件斋配。

于是:

def filter_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    # 需要過濾<title>標(biāo)簽,避免作文題目干擾
    text = soup.body.get_text()
    return text

STEP 3:
接下來,需要統(tǒng)計(jì)一篇文章中每個單詞的出現(xiàn)個數(shù)艰争。這里主要用到了 re, collections.counter 兩個 Python 內(nèi)置對象坏瞄。

def calculate_words_frequency(file):
    # 讀取文件
    with open(file) as f:
        # html 處理
        f = filter_html(f)

        line_box = []
        word_box = []
        
        # 轉(zhuǎn)成小寫并將句子分成詞
        line_box.extend(f.strip().lower().split())
        
        # 去除標(biāo)點(diǎn)符號的影響    
        for word in line_box:
            if not word.isalpha():
                word = filter_puctuation(word)
            word_box.append(word)
        
        # 統(tǒng)計(jì)詞頻
        word_box = fileter_simple_words(collections.Counter(word_box))

        return word_box

這里解釋一下 filter_puctuation()這個函數(shù)。當(dāng)筆者輸出詞頻結(jié)果時甩卓,發(fā)現(xiàn)由于標(biāo)點(diǎn)符號的存在鸠匀,很多單詞的尾部會跟著. , or ?

為了避免標(biāo)點(diǎn)對詞頻統(tǒng)計(jì)的干擾,筆者使用了簡單的正則去過濾掉標(biāo)點(diǎn)逾柿。(正則不太會缀棍,測試時夠用,應(yīng)該有更簡單和全面的寫法)

# 過濾單詞尾部的,.?"和頭部的"
def filter_puctuation(word):
    return re.sub(r'(\,$)|(\.$)|(\?$)|(\"$)|(^\")', '', word)

STEP 4:

在測試結(jié)果集的時候發(fā)現(xiàn)机错,排名靠前的單詞都是介詞爬范,代詞,連詞等常用詞弱匪。如 he, and, that. 但這些詞并不是筆者想要的青瀑,于是需要先把常用簡單詞匯給過濾掉,再統(tǒng)計(jì)詞頻萧诫。(我手動敲了一些斥难,應(yīng)該網(wǎng)上有更全的清單)

def fileter_simple_words(words):
    # 過濾詞清單
    simple_words = ['the', 'a', 'an', 'to', 'is',
                    'am', 'are', 'the', 'that', 'which',
                    'i', 'you', 'he', 'she', 'they',
                    'it', 'of', 'for', 'have', 'has',
                    'their', 'my', 'your', 'will', 'all',
                    'but', 'while', 'with', 'only', 'more',
                    'who', 'should', 'there', 'can', 'might',
                    'could', 'may', 'be', 'on', 'at',
                    'after', 'most', 'even', 'and', 'in',
                    'best', 'better', 'as', 'no', 'ever',
                    'me', 'not', 'his', 'her'
                    ]

    # words type is counter.
    for word in list(words):
        if word in simple_words:
            del words[word]

    return words

STEP 5:
快接近尾聲啦。在統(tǒng)計(jì)完 1 篇文章的詞頻后帘饶,我需要將 5 篇文章的詞頻求和哑诊。鑒于 counter
對象的可加性,于是

def multiple_file_frequency(files):
    total_counter = collections.Counter()
    for file in files:
        total_counter += calculate_words_frequency(file)
    return total_counter

STEP 6:
求和之后尖奔,我想知道前 10 高頻的詞匯是哪些搭儒。

def most_common_words(files, number):
    total_counter = multiple_file_frequency(files)
    return total_counter.most_common(number)

STEP 7:
最后,使用 Python 可視化工具把結(jié)果生成柱狀圖提茁。

def draw_figures(figures):
    labels, values = zip(*figures)
    indexes = np.arange(len(labels))
    width = 0.5
    plt.bar(indexes, values, width)
    plt.xticks(indexes, labels)
    plt.show()
Final results

大功告成淹禾。

學(xué)托福

好不容易算出來了結(jié)果,當(dāng)然要好好利用啦茴扁。

通過同義詞網(wǎng)站 Thesaurus铃岔,我可以查詢單詞的同義詞。Take parents and teachers as examples.

parent thesaurus
image thesaurus

接下來我會選取一些同義詞進(jìn)行記憶峭火,提高自己的詞匯量毁习,然后在寫作中靈活替換,從而提高寫作能力卖丸。當(dāng)然纺且,考試時,也會提高分?jǐn)?shù)稍浆。

畢竟 appropriate word choice 是托福寫作的一項(xiàng)考核標(biāo)準(zhǔn)载碌。

改進(jìn)

花了半天時間做這個小 Demo猜嘱,有一些地方是自己覺得可以以后繼續(xù)研究的。

  1. 簡單詞的詞庫更新
  2. 自動批量讀取文件嫁艇,無需重命名朗伶,手動輸入
  3. 數(shù)據(jù)圖更直觀,美觀 (研究 numpy, pandas, matplotlib.pyplot)
  4. 結(jié)果存儲為 cvs步咪,便于日后使用

Reference

Github 項(xiàng)目地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末论皆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子猾漫,更是在濱河造成了極大的恐慌点晴,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件静袖,死亡現(xiàn)場離奇詭異觉鼻,居然都是意外死亡俊扭,警方通過查閱死者的電腦和手機(jī)队橙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萨惑,“玉大人捐康,你說我怎么就攤上這事∮拱” “怎么了解总?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長姐仅。 經(jīng)常有香客問我花枫,道長,這世上最難降的妖魔是什么掏膏? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任劳翰,我火速辦了婚禮,結(jié)果婚禮上馒疹,老公的妹妹穿的比我還像新娘佳簸。我一直安慰自己,他們只是感情好颖变,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布生均。 她就那樣靜靜地躺著,像睡著了一般腥刹。 火紅的嫁衣襯著肌膚如雪马胧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天衔峰,我揣著相機(jī)與錄音佩脊,去河邊找鬼录别。 笑死,一個胖子當(dāng)著我的面吹牛邻吞,可吹牛的內(nèi)容都是我干的组题。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼抱冷,長吁一口氣:“原來是場噩夢啊……” “哼崔列!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旺遮,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤赵讯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后耿眉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體边翼,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年鸣剪,在試婚紗的時候發(fā)現(xiàn)自己被綠了组底。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡筐骇,死狀恐怖债鸡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铛纬,我是刑警寧澤厌均,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站告唆,受9級特大地震影響棺弊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擒悬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一模她、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茄螃,春花似錦缝驳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拼弃,卻和暖如春夏伊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吻氧。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工溺忧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咏连,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓鲁森,卻偏偏與公主長得像祟滴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子歌溉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,516評論 25 707
  • 其實(shí)一直以來我對日本的很多東西都是很反感的垄懂。其中的原因自不用說。但是當(dāng)我看到日本著名的作家川端康成寫的散文臨終的眼...
    邀月成三閱讀 533評論 0 0
  • 猥瑣男人與刻薄女人是大學(xué)同學(xué)痛垛,畢業(yè)后又在同一個單位工作草慧,同時評了高級職稱,今年又搭了班子匙头,這緣分可謂是不淺漫谷。 猥瑣...
    隔三兒差五起高調(diào)閱讀 638評論 0 0