python文本相似度
『壹』 python難還是ruby難
一、異同對比選擇
1、Python和ruby的相同點:
·都強調語法簡單,都具有更一般的表達方式。python是縮進,ruby是類basic的表達。都大量減少了符號。
·都是動態數據類型。都是有豐富的數據結構。
·都具有C語言擴展能力,都具有可移植性,比perl的可移植性更好。也都可以作為嵌入語言。
·都是面向對象的語言,都可以作為大項目的開發工具。
·都有豐富的庫支持。
·也有最寬松的版權許可,除了一些工具屬於GNU世界。
·都有lisp特色的eval函數,也都能把函數作為參數。
·也有圖形界面的ruby的專門編輯器。
·都獲得了廣泛的c庫的支持。如qt、gtk、tk、SDL、FOX等,ruby計劃實現SWIG介面。
·都有完善的文檔。
相關推薦:《Python視頻教程》
2、和python相比ruby的優點:
·具有正則表達式和嵌入html的功能。python也有正則表達式,但沒有ruby的應用方便和廣泛。python的嵌入html項目才剛起步。ruby還有apache的mod模塊。ruby本身也實現和很多unix工具,如racc,doctools。比python更親近linux。
·比python功能更完整的面向對象的語法。
·ruby的整個庫都是具有類繼承的結構。
·他的基本的數據類型和運算符都是可以重載的。
·ruby主要的功能都是通過對象的方法調用來實現的,而不是函數。python也在向這方面發展,但沒有ruby做的徹底。
·ruby的類是更規范的單繼承,還有介面等概念的實現。
·python可以實現在列表內的條件語句、循環語句,而ruby用「塊」的方式來實現這個功能,比python的更靈活,更具有通用性。
·ruby具有類似lisp的徹底的函數方式的條件語句、循環語句等。語句的表達能力更強。
·附帶一些unix工具,如racc等。
3、和python相比ruby的不足:
·最大的不足正是因為ruby的強大所引起的。它沒有python的簡單性好。比較復雜的面向對象語法、「塊」語法的引入、正則表達式的引入、一些簡寫標記都增加了語言的復雜性。
·python的縮進表達方式比ruby的basic的表達方式更讓人悅目,ruby程序的滿眼的end讓人不舒服。當然,ruby認為end的方式比python更先進。
·ruby還沒有python的「自省」的能力,沒有從程序文件中生成文檔的能力。
·ruby沒有國際化的支持。國際化支持在ruby的計劃中。這是因為ruby的歷史比python要短造成的。
·ruby沒有類似jython的東西。
4、python和ruby的語言的選擇:
從簡單的就是好的來說,選python是沒錯的。python適合尋找簡單語言的人,這很可能造成python更流行,因此也有更多的支持。但如果要追求更強大的語法功能,則ruby是好的選擇。因為ruby和python的哲學有很多相似的地方,先從python入手,盡量用python,如果python的能力不足了,可以在找ruby。
ruby和python的比較,就像五筆和拼音輸入法的比較。拼音作為入門的輸入法和長久使用的輸入法都沒有問題。五筆適合更高要求的情況。如果追求性能的不妨學學ruby。對編程語言感興趣,想了解各種編程概念的學ruby也會很興奮。
二、兩者各有特點:
1、Python從語法上來說更質朴一些,而Ruby更性感一些
Python的語法相對其他腳本語言來說,沒有太多花巧的地方,顯得比較死板一點,其實從Python強制代碼縮進也可以看出來Guido設計語言的取向。語法死板的一面就是不容易玩出來更性感的東西,比方說Rails這樣的框架,另外Python也無法做DSL這樣的事情,但是語法死板的另一面就是比較規范,相對來說,更加適應軟體開發的工程性要求,更容易組織大規模的團隊進行開發。
Ruby的語法非常靈活,Matz設計ruby的出發點也是為了coding for fun,因此可以用ruby玩出來很多花樣,運用足夠的技巧,可以用Ruby寫出來逼近自然語言的DSL,對於程序員來說,玩ruby確實充滿了樂趣。Rails能在ruby社區誕生,而不是Python社區誕生絕對和編程語言有直接的關系。不過ruby語法靈活的另一面就是編程實現風格的多樣性,這對於大規模團隊的協作和管理是一個挑戰。
2、Python的解析器實現更成熟,第三方庫質量高
Ruby1.9解析器盡管已經有了很大的性能提升和很多新的功能,但是從源代碼實現的角度來說,基本上是通過在Ruby1.8源代碼上打patch來增加功能的。從源代碼的結構來說,Ruby的實現太古老了,Ruby擴展起來比較困難,只能不斷打patch。這也是為什麼現在Ruby社區涌現出來那麼多新的Ruby解析器實現的原因。從很大程度上來說,這制約了Ruby的發展速度。相對而言,Python解析器更成熟,也比較穩定。
在第三方類庫的數量上來說,Ruby並不比Python少,但是高性能高質量久經考驗的第三方類庫Python要明顯比Ruby多,事實上很多Ruby的第三方類庫都不太成熟,因此這也很大程度上制約了Ruby的發展。
3、Python的應用領域非常廣泛,而Ruby目前主要局限在在Web領域
Python應用的領域非常廣泛,除了web開發以外,還被廣泛用在伺服器後端的高性能伺服器實現,伺服器後端的各種密集運算,全文檢索,各種文本處理,系統管理等等,另外桌面應用領域wxPython也是一個很成熟的跨平台GUI框架。對於某些特殊的應用,比方說調用操作系統內核API,Python也可以完成的很好,比方說大量小文件的實時同步方案,就是用Python直接調用linuxKernel的inotify特性來實現的。所以可以說Python是軟體開發領域的瑞士軍刀,什麼事情都可以做。
正是由於Ruby解析器和Ruby類庫的制約,Ruby的應用主要局限在Web開發領域,目前Ruby的應用還無法延伸到web開發領域以外的很多地方。據說豆瓣早期就考慮過Ruby on Rails,但是因為Ruby不能做其他事情,而Python可以大包大攬,最後放棄Ruby選擇了Python。
4、在Web領域Ruby是王者
隨著互聯網應用更進一步滲透到軟體開發的各個領域,其實web開發占整個軟體行業開發的比重也是越來越大。盡管Ruby在其他領域很受制約,但是在Web開發領域就是絕對的王者了。Rails框架的領先程度已經遠遠甩開了任何一個潛在的競爭對手十萬八千里。因此盡管Ruby可能有這樣那樣的問題,但是說到Web開發,Rails幾乎就是無可爭議的唯一選擇。
而Python盡管十分全面,卻偏偏在web開發領域不彰,web框架雖然眾多,卻沒有一個真正可以挑大樑,Django雖然在Python社區比較流行,但很多方面也有缺陷。現在的互聯網應用往往都是多種語言混合編程,Ruby在Web以外的缺陷也可以用其他語言來彌補。
5、Python的包管理不如Ruby
盡管Python的第三方類庫更高質量更成熟,但是Python社區缺乏Ruby Gem這樣一個良好的包管理軟體和包發布的網站。因此應用的構建顯得不如Ruby那麼方便,那麼人性化。特別是在類庫的版本升級上,就會遇到很多麻煩,不如Ruby Gem那麼簡單。
不過總的來說,Python和Ruby還是相似度極高的兩種編程語言,即使兩種編程語言都學習一下也不會浪費太多時間。如果我個人選擇的話,會首選用Rails來構建web應用,再根據情況選擇Python或者java處理一些伺服器後端的運算。總之,未來還是一個混合編程的時代,我們需要多了解一些編程工具,然後根據需要看菜吃飯才行。
『貳』 python數據分析需要哪些庫
1.Numpy庫
是Python開源的數值計算擴展工具,提供了Python對多維數組的支持,能夠支持高級的維度數組與矩陣運算。此外,針對數組運算也提供了大量的數學函數庫,Numpy是大部分Python科學計算的基礎,具有很多功能。
2.Pandas庫
是一個基於Numpy的數據分析包,為了解決數據分析任務而創建的。Pandas中納入了大量庫和標準的數據模型,提供了高效地操作大型數據集所需要的函數和方法,使用戶能快速便捷地處理數據。
3.Matplotlib庫
是一個用在Python中繪制數組的2D圖形庫,雖然它起源於模仿MATLAB圖形命令,但它獨立於MATLAB,可以通過Pythonic和面向對象的方式使用,是Python中Z出色的繪圖庫。主要用純Python語言編寫的,它大量使用Numpy和其他擴展代碼,即使對大型數組也能提供良好的性能。
4.Seaborn庫
是Python中基於Matplotlib的數據可視化工具,提供了很多高層封裝的函數,幫助數據分析人員快速繪制美觀的數據圖形,從而避免了許多額外的參數配置問題。
5.NLTK庫
被稱為使用Python進行教學和計算語言學工作的Z佳工具,以及用自然語言進行游戲的神奇圖書館。NLTK是一個領先的平台,用於構建使用人類語言數據的Python程序,它為超過50個語料庫和詞彙資源提供了易於使用的介面,還提供了一套文本處理庫,用於分類、標記化、詞干化、解析和語義推理、NLP庫的包裝器和一個活躍的討論社區。
『叄』 python怎麼將本地一個文件夾的所有文本讀進內存中
列出文件,把各個文件打開讀到bytes位元組串裡面.
比如
f=open("a.txt","rb")
a={}
a["a.txt"]=f.read()
f=open("b.txt","rb") #寫成對列表的循環
a["b.txt"]=f.read()
f=open("c.txt","rb") #寫成對列表的循環
a["c.txt"]=f.read()
『肆』 最受歡迎的 15 大 Python 庫有哪些
1、Pandas:是一個Python包,旨在通過「標記」和「關系」數據進行工作,簡單直觀。它設計用於快速簡單的數據操作、聚合和可視化,是數據整理的完美工具。
2、Numpy:是專門為Python中科學計算而設計的軟體集合,它為Python中的n維數組和矩陣的操作提供了大量有用的功能。該庫提供了NumPy數組類型的數學運算向量化,可以改善性能,從而加快執行速度。
3、SciPy:是一個工程和科學軟體庫,包含線性代數,優化,集成和統計的模塊。SciPy庫的主要功能是建立在NumPy上,通過其特定子模塊提供有效的數值常式,並作為數字積分、優化和其他常式。
4、Matplotlib:為輕松生成簡單而強大的可視化而量身定製,它使Python成為像MatLab或Mathematica這樣的科學工具的競爭對手。
5、Seaborn:主要關注統計模型的可視化(包括熱圖),Seaborn高度依賴於Matplotlib。
6、Bokeh:獨立於Matplotlib,主要焦點是交互性,它通過現代瀏覽器以數據驅動文檔的風格呈現。
7、Plotly:是一個基於Web用於構建可視化的工具箱,提供API給一些編程語言(Python在內)。
8、Scikits:是Scikits
Stack額外的軟體包,專為像圖像處理和機器學習輔助等特定功能而設計。它建立在SciPy之上,中集成了有質量的代碼和良好的文檔、簡單易用並且十分高效,是使用Python進行機器學習的實際行業標准。
9、Theano:是一個Python軟體包,它定義了與NumPy類似的多維數組,以及數學運算和表達式。此庫是被編譯的,可實現在所有架構上的高效運行。
10、TensorFlow:是數據流圖計算的開源庫,旨在滿足谷歌對訓練神經網路的高需求,並且是基於神經網路的機器學習系統DistBelief的繼任者,可以在大型數據集上快速訓練神經網路。
11、Keras:是一個用Python編寫的開源的庫,用於在高層的介面上構建神經網路。它簡單易懂,具有高級可擴展性。
12、NLTK:主要用於符號學和統計學自然語言處理(NLP) 的常見任務,旨在促進NLP及相關領域(語言學,認知科學人工智慧等)的教學和研究。
13、Gensim:是一個用於Python的開源庫,為有向量空間模型和主題模型的工作提供了使用工具。這個庫是為了高效處理大量文本而設計,不僅可以進行內存處理,還可以通過廣泛使用NumPy數據結構和SciPy操作來獲得更高的效率。
…………
『伍』 python difflib比較,生成html發現錯位比較,導致差異過多
github搜diff有很多工具,選點贊多的測試
不要局限python的,可以用命令行掉三方工具也行
『陸』 如何用Python玩轉TF-IDF之尋找相似文章並生成摘要
應用1:關鍵詞自動生成
核心思想是對於某個文檔中的某個詞,計算其在這個文檔中的標准化TF值,然後計算這個詞在整個語料庫中的標准化IDF值。在這里,標准化是說對原始的計算公式進行了一些變換以取得更好的衡量效果,並避免某些極端情況的出現。這個詞的TF-IDF值便等於TF*IDF。對於這個文檔中的所有詞計算它們的TF-IDF值,並按照由高到低的順序進行排序,由此我們便可以提取我們想要的數量的關鍵詞。
TF-IDF的優點是快捷迅速,結果相對來說比較符合實際情況。缺點是當一篇文檔中的兩個詞的IDF值相同的時候,出現次數少的那個詞有可能更為重要。再者,TF-IDF演算法無法體現我詞的位置信息,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正確的。存在的解決辦法是對文章的第一段和每段的第一句話給予比較大的權重。
應用2:計算文本相似度
明白了對於每個詞,如何計算它的TF-IDF值。那麼計算文本相似度也輕而易舉。我們已經計算了文章中每個詞的TF-IDF值,那麼我們便可以將文章表徵為詞的TF-IDF數值向量。要計算兩個文本的相似度,只需要計算餘弦即可,餘弦值越大,兩個文本便越相似。
應用3:自動摘要
2007年,美國學者的論文<A Survey on Automatic Text Summarization>總結了目前的自動摘要演算法,其中很重要的一種就是詞頻統計。這種方法最早出自1958年IBM公司一位科學家的論文<The Automatic Creation of Literature Abstracts>。這位科學家認為,文章的信息都包含在句子中,有的句子包含的信息多,有的句子包含的信息少。自動摘要就是找出那些包含信息最多的句子。那麼句子的信息量怎麼衡量呢?論文中採用了關鍵詞來衡量。如果包含的關鍵詞越多,就說明這個句子越重要,這位科學家提出用Cluster的來表示關鍵詞的聚集。所謂簇,就是包含多個關鍵詞的句子片段。
以第一個圖為例,其中的cluster一共有7個詞,其中4個是關鍵詞。因此它的重要性分值就等於(4*4)/7=2.3。然後,找出包含cluster重要性分值最高的句子(比如5句),把它們合在一起,就構成了這篇文章的自動摘要。具體實現可以參見<Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites>(O'Reilly, 2011)一書的第8章,Python代碼見github。這種演算法後來被簡化,不再區分cluster,只考慮句子包含的關鍵詞。偽代碼如下。
Summarizer(originalText,maxSummarySize):
//計算文本的詞頻,生成一個列表,比如[(10,'the'),(3,'language'),(8,'code')...]
wordFrequences=getWordCounts(originalText)
//過濾掉停用詞,列表變成[(3,'language'),(8,'code')...]
contentWordFrequences=filtStopWords(wordFrequences)
//按照詞頻的大小進行排序,形成的列表為['code','language'...]
contentWordsSortbyFreq=sortByFreqThenDropFreq(contentWordFrequences)
//將文章分成句子
sentences=getSentences(originalText)
//選擇關鍵詞首先出現的句子
setSummarySentences={}
:
firstMatchingSentence=search(sentences,word)
setSummarySentences.add(firstMatchingSentence)
ifsetSummarySentences.size()=maxSummarySize:
break
//將選中的句子按照出現順序,組成摘要
summary=""
foreachsentenceinsentences:
:
summary=summary+""+sentence
returnsummary
類似的演算法已經被寫成了工具,比如基於Java的Classifier4J庫的SimpleSummariser模塊、基於C語言的OTS庫、以及基於classifier4J的C#實現和python實現。
『柒』 中文短句相似度匹配方法
一、原始落後的VSM
網上搜索關鍵詞「短文本 相似度」,出來的結果基本上都是以BOW(Bag of words)的VSM方案,大致流程如下:
分詞 —> 提取關鍵詞 —> 計算tf或if-idf,以向量的形式替換原文本 —> 文本相似度的問題轉變為計算向量相似度
一開始這樣的一個思路,很清晰明了,而且網上相應的資料也很多,然後就開搞吧。
1、把所有短文本去掉標點符號,用jieba分詞分好詞,去除停用詞,得到分好的文本;
2、按一定規則抽取特徵詞彙,作為後期向量的每一維;
3、用sklearn庫中的原生方法CountVectorizer、TfidfVectorizer等得到矩陣;
4、每個短文本計算對應得到的向量,採用K-Means聚類的方法進行非監督學習。
文本分類的大致思路基本上就如上所述,具體的細節調整就視實際情況而定。然而,想法是美好的,現實是殘酷的,全部分好詞的文本,抽取的特徵詞較多,即向量的維度較大,且向量是稀疏的,在使用K-Means時,會出現有個別cluster下的文本數量特別大;
『捌』 怎樣用python或者是java計算文本相似度
第一步:把每個網頁文本分詞,成為詞包(bag of words)。
第三步:統計網頁(文檔)總數M。
第三步:統計第一個網頁詞數N,計算第一個網頁第一個詞在該網頁中出現的次數n,再找出該詞在所有文檔中出現的次數m。則該詞的tf-idf 為:n/N * 1/(m/M) (還有其它的歸一化公式,這里是最基本最直觀的公式)
第四步:重復第三步,計算出一個網頁所有詞的tf-idf 值。
第五步:重復第四步,計算出所有網頁每個詞的tf-idf 值。
3、處理用戶查詢
第一步:對用戶查詢進行分詞。
第二步:根據網頁庫(文檔)的數據,計算用戶查詢中每個詞的tf-idf 值。
4、相似度的計算
使用餘弦相似度來計算用戶查詢和每個網頁之間的夾角。夾角越小,越相似。
『玖』 python有沒有什麼包能判斷文本相似度
有,gensim包。
主要分成三步:
第一步,計算所有評論的tf-idf 值。
第二步,使用所有評論的tf-idf 值算出商品描述的tf-idf 值。
第三步,計算每一個評論和商品描述之間的tf-idf 餘弦相似度。
可以 在這里找到具體用法:
http://blog.csdn.net/chencheng126/article/details/50070021