python - 如何統(tǒng)計(jì)一份英文 API 開(kāi)發(fā)文檔(如 javadoc文檔)的詞頻?
問(wèn)題描述
如題,簡(jiǎn)單一點(diǎn)的功能是如何對(duì)一份英文 API 開(kāi)發(fā)文檔進(jìn)行詞頻的統(tǒng)計(jì)?(文檔可能是多個(gè) html 文件,也可能是 chm 文件,不是簡(jiǎn)單的 txt 文本);
復(fù)雜一點(diǎn)的需求是,因?yàn)殚_(kāi)發(fā)文檔涉及很多類名、函數(shù)或方法名等,單詞可能會(huì)連在一起,統(tǒng)計(jì)時(shí)最好能夠分開(kāi)(這個(gè)可以根據(jù)命名規(guī)則來(lái)分開(kāi));
再?gòu)?fù)雜一點(diǎn)的需求是,因?yàn)閱渭兘y(tǒng)計(jì)一個(gè)文檔的詞頻沒(méi)多大的實(shí)際意義,如何將統(tǒng)計(jì)后的單詞再加工處理:
剔除掉一些簡(jiǎn)單的,并對(duì)開(kāi)發(fā)來(lái)說(shuō)沒(méi)多大意義的單詞,如 the, are, to, is……
分析出里面涉及到計(jì)算機(jī)的專業(yè)名詞、編程中特定含義的單詞或編程語(yǔ)言的關(guān)鍵字(涉及到文檔對(duì)應(yīng)的不同語(yǔ)言);
對(duì)最終分析出的單詞標(biāo)注出解釋(中文,可以通過(guò)第三方 API)……
如果開(kāi)發(fā)具有以上功能的軟件,具體需要涉及哪些技術(shù)? 歡迎提供你的想法……
呃,其實(shí)我的痛點(diǎn)是,看一份英文文檔時(shí),有太多不懂的單詞,經(jīng)常要去查單詞,效率太低了,如果有一個(gè)工具可以統(tǒng)計(jì)分析出一份文檔的詞匯,就可以在看文檔前先大致熟悉詞匯的意思,提高效率;而且對(duì)于開(kāi)發(fā)時(shí),命名也有幫助……
修改備注:
分開(kāi)連在一起的單詞確實(shí)不是分詞技術(shù),之前說(shuō)錯(cuò)了;
原問(wèn)題提到的運(yùn)用機(jī)器學(xué)習(xí),我的想法是這樣的:一個(gè)具有機(jī)器學(xué)習(xí)的軟件大量閱讀編程的開(kāi)發(fā)文檔,找出里面的專業(yè)術(shù)語(yǔ),使整個(gè)功能的實(shí)現(xiàn)更加智能化……當(dāng)然這是我瞎想的,不一定對(duì),不喜勿噴;
最后,我提到的看英文文檔的問(wèn)題,誰(shuí)都有剛開(kāi)始看不懂,效率低的階段,誰(shuí)不知道多看,效率就會(huì)慢慢提高?道理大家都懂……但是,這個(gè)不是我們討論的重點(diǎn),我只是有這么個(gè)想法,提出來(lái)讓大家討論下而已
另外,提的問(wèn)題如果有錯(cuò),可以留言,我會(huì)修改,能不踩嗎?
問(wèn)題解答
回答1:準(zhǔn)備考研,很久沒(méi)寫過(guò)代碼了,不過(guò)大概思路應(yīng)該是:
清洗過(guò)濾:對(duì)于html,首先把內(nèi)容過(guò)濾出來(lái),你可以自己寫正則或者用找點(diǎn)別人寫好的
單詞分詞:先用空格等常見(jiàn)的分隔符對(duì)單詞過(guò)濾,再根據(jù)不同的語(yǔ)言命名規(guī)范找出一個(gè)個(gè)的單詞
過(guò)濾常用詞:在網(wǎng)上應(yīng)該可以找到英語(yǔ)常用詞的文件,匹配一下
WordCount:可以直接單純的用python自己實(shí)現(xiàn)MapReduce的過(guò)濾,或者Hadoop、Spark之類的也可以
到此為止就完成了過(guò)濾簡(jiǎn)單詞的單詞統(tǒng)計(jì)了關(guān)于統(tǒng)計(jì)出計(jì)算機(jī)相關(guān)詞,你需要網(wǎng)上下載計(jì)算機(jī)相關(guān)詞匯的數(shù)據(jù)文件,直接匹配即可需要給出解釋的話,調(diào)用有道、百度翻譯的api即可,不過(guò)這些API可能有次數(shù)上限,我沒(méi)有用過(guò)。
以上所說(shuō)步驟都沒(méi)有考慮效率的問(wèn)題,如果需要考慮效率問(wèn)題,還需要使用到些算法或直接使用別人寫好的類庫(kù)。關(guān)于你所說(shuō)到的機(jī)器學(xué)習(xí),這里的需求暫時(shí)不需要、且沒(méi)必要使用到。
最后:我還是想說(shuō),想讀懂文檔的最快的辦法就是多讀文檔,堅(jiān)持讀下來(lái),你會(huì)發(fā)現(xiàn)讀文檔的速度會(huì)越來(lái)越快。不過(guò)把這個(gè)當(dāng)作練手的項(xiàng)目,也算是做了點(diǎn)有意思的事情。
關(guān)于問(wèn)題修改后的回復(fù):你提及的機(jī)器學(xué)習(xí),目前大體上是有監(jiān)督式和非監(jiān)督式,但根據(jù)你的提及:
一個(gè)具有機(jī)器學(xué)習(xí)的軟件大量閱讀編程的開(kāi)發(fā)文檔,找出里面的專業(yè)術(shù)語(yǔ),使整個(gè)功能的實(shí)現(xiàn)更加智能化……
如果采用監(jiān)督式學(xué)習(xí)那必然需要語(yǔ)料數(shù)據(jù)的支持,而如果已經(jīng)有語(yǔ)料數(shù)據(jù)何不直接用字符串匹配實(shí)現(xiàn)?
當(dāng)采用非監(jiān)督式學(xué)習(xí),目前我也是初學(xué),依我的理解,似乎只能達(dá)到聚類的效果,若想自動(dòng)識(shí)別是計(jì)算機(jī)術(shù)語(yǔ),必然還是需要人工標(biāo)注或者數(shù)據(jù)的支持
如果再往下深究,就需要好好研究NLP了
我覺(jué)得你好像是對(duì)機(jī)器學(xué)習(xí)感興趣,但我感覺(jué)這個(gè)并不是機(jī)器學(xué)習(xí)練手的一個(gè)好項(xiàng)目。
回答2:這個(gè)應(yīng)該不叫英語(yǔ)分詞,分詞應(yīng)該指按句子成分劃分。連在一次的變量名可以考慮按常見(jiàn)的命名方式識(shí)別,比如大小寫的Camel-Case、下劃線分割的 Underscores 等。
分詞可以找各種 Word Splitting 庫(kù),python 應(yīng)該有很多。計(jì)算機(jī)的專業(yè)名詞下載詞庫(kù),單詞提取出來(lái)之后跟詞庫(kù)匹配得到釋義。
但其實(shí)即使做出來(lái)也不一定能更方便閱讀,光看單詞有點(diǎn)曲線救國(guó)的感覺(jué),很可能根本看不進(jìn)去。計(jì)算機(jī)文章的詞匯量不是很多,一回生兩回熟,優(yōu)化查詞體驗(yàn)比較妥,推薦 collins雙解 結(jié)合 Macmillan ,MDict 或者歐路詞典都可以加載。Chrome 也可以裝 Saladict 沙拉查詞。
相關(guān)文章:
1. php - 第三方支付平臺(tái)在很短時(shí)間內(nèi)多次異步通知,訂單多次確認(rèn)收款2. html5 - h5寫的app用的webview,用手機(jī)瀏覽器打開(kāi)不顯示?3. javascript - webpack --hot 熱重載無(wú)效的問(wèn)題4. Mysql && Redis 并發(fā)問(wèn)題5. javascript - node服務(wù)端渲染的困惑6. javascript - 百度echarts series數(shù)據(jù)更新問(wèn)題7. css - 求推薦幾款好用的移動(dòng)端頁(yè)面布局調(diào)試工具呢?8. mysql新建字段時(shí) timestamp NOT NULL DEFAULT ’0000-00-00 00:00:00’ 報(bào)錯(cuò)9. mysql scripts提示 /usr/bin/perl: bad interpreter10. mysql - 一個(gè)表和多個(gè)表是多對(duì)多的關(guān)系,該怎么設(shè)計(jì)
