自動摘要演算法
⑴ nlp演算法是什麼呢
1、nlp演算法是自然語言處理演算法。自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智慧領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。
2、自然語言處理(nlp)是一門融語言學、計算機科學、數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言,所以它與語言學的研究有著密切的聯系,但又有重要的區別。
3、自然語言處理(nlp)並不是一般地研究自然語言,而在於研製能有效地實現自然語言通信的計算機系統,特別是其中的軟體系統。因而它是計算機科學的一部分。
4、自然語言處理(nlp)主要應用於機器翻譯、輿情監測、自動摘要、觀點提取、文本分類、問題回答、文本語義對比、語音識別、中文OCR等方面。
5、自然語言(nlp)的形式(字元串)與其意義之間是一種多對多的關系。其實這也正是自然語言的魅力所在。但從計算機處理的角度看,我們必須消除歧義,而且有人認為它正是自然語言理解中的中心問題,即要把帶有潛在歧義的自然語言輸入轉換成某種無歧義的計算機內部表示。
⑵ 如何用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實現。
⑶ MD5演算法原理及實現
散列函數,也稱作哈希函數,消息摘要函數,單向函數或者雜湊函數。散列函數主要用於驗證數據的完整性。通過散列函數,可以創建消息的「數字指紋」,消息接收方可以通過校驗消息的哈希值來驗證消息的完整性,防止消息被篡改。散列函數具有以下特性:
任何消息經過散列函數處理後,都會產生一個唯一的散列值,這個散列值可以用來驗證消息的完整性。計算消息散列值的過程被稱為「消息摘要」,計算消息散列值的演算法被稱為消息摘要演算法。常使用的消息摘要演算法有:MD—消息摘要演算法,SHA—安全散列演算法,MAC—消息認證碼演算法。本文主要來了解MD演算法。
MD5演算法是典型的消息摘要演算法,它是由MD4,MD3和MD2演算法演變而來。無論是哪一種MD演算法,其原理都是接受一個任意長度的消息並產生一個128位的消息摘要。如果把得到的消息摘要轉換成十六進制字元串,則會得到一個32位元組長度的字元串,我們平常見到的大部分MD數字指紋就是一個長度為32的十六進制字元串。
假設原始消息長度是b(以bit為單位),注意這里b可以是任意長度,並不一定要是8的整數倍。計算該消息MD5值的過程如下:
在計算消息的MD5值之前,首先對原始信息進行填充,這里的信息填充分為兩步。
第一步,對原始信息進行填充,填充之後,要求信息的長度對512取余等於448。填充的規則如下:假設原始信息長度為b bit,那麼在信息的b+1 bit位填充1,剩餘的位填充0,直到信息長度對512取余為448。這里有一點需要注意,如果原始信息長度對512取余正好等於448,這種情況仍然要進行填充,很明顯,在這時我們要填充的信息長度是512位,直到信息長度對512取余再次等於448。所以,填充的位數最少為1,最大為512。
第二步,填充信息長度,我們需要把原始信息長度轉換成以bit為單位,然後在第一步操作的結果後面填充64bit的數據表示原始信息長度。第一步對原始信息進行填充之後,信息長度對512取余結果為448,這里再填充64bit的長度信息,整個信息恰好可以被512整除。其實從後續過程可以看到,計算MD5時,是將信息分為若干個分組進行處理的,每個信息分組的長度是512bit。
在進行MD5值計算之前,我們先來做一些定義。
下面就是最核心的信息處理過程,計算MD5的過程實際上就是輪流處理每個信息分組的過程。
MD5演算法實現如下所示。
這里也和Java提供的標准MD5演算法進行了對比,通過測試可以看到該MD5計算的結果和Java標准MD5演算法的計算結果是一樣的。
⑷ 摘要演算法的特點是什麼
「消息摘要」(Message Digest)是一種能產生特殊輸出格式的演算法,這種加密演算法的特點是無論用戶輸入什麼長度的原始數據,經過計算後輸出的密文都是固定長度的,這種演算法的原理是根據一定的運算規則對原數據進行某種形式的提取,這種提取就是「摘要」,被「摘要」的數據內容與原數據有密切聯系,只要原數據稍有改變,輸出的「摘要」便完全不同,因此基於這種原理的演算法便能對數據完整性提供較為健全的保障。但是,由於輸出的密文是提取原數據經過處理的定長值,所以它已經不能還原為原數據,即消息摘要演算法是「不可逆」的,理論上無法通過反向運算取得原數據內容,因此它通常只能被用來做數據完整性驗證,而不能作為原數據內容的加密方案使用,否則誰也無法還原。
⑸ 摘要演算法
SHA-1演算法可以從明文生成160bit的信息摘要,示例如下:
給定明文: abcd
SHA-1摘要:
1.摘要長度不同 。
MD5的摘要的長度為128bit,SHA-1摘要長度160bit。多出32bit意味著什麼呢?不同明文的碰撞幾率降低了2^32 = 324294967296倍。
2.性能略有差別
SHA-1生成摘要的性能比MD5略低。
SHA-2是一系列SHA演算法變體的總稱,其中包含如下子版本:
SHA-256:可以生成長度256bit的信息摘要。
SHA-224:SHA-256的「閹割版」,可以生成長度224bit的信息摘要。
SHA-512:可以生成長度512bit的信息摘要。
SHA-384:SHA-512的「閹割版」,可以生成長度384bit的信息摘要。
是信息摘要的一種實現,它可以從任意長度的明文字元串生成128位哈希值
1.收集相關業務參數,在這里是金額和目標賬戶。當然,實際應用中的參數肯定比這多得多,這里只是做了簡化。
2.按照規則,把參數名和參數值拼接成一個字元串,同時把給定的 密鑰 也拼接起來。之所以需要密鑰,是因為攻擊者也可能獲知拼接規則。
3.利用MD5演算法,從原文生成哈希值。MD5生成的哈希值是128位的二進制數,也就是32位的十六進制數。
考慮把多種摘要演算法結合使用比如
明文: abcd
MD5摘要:
e2fc714c4727ee93 95f324cd2e7f331f
SHA-256摘要:
合成摘要:
e2fc714c4727ee93
取MD5摘要的前16位,取SHA-256的後32位
第一步:處理原文
首先,計算出原文長度(bit)對512求余的結果,如果不等於448,就需要填充原文使得原文對512求余的結果等於448。填充的方法是第一位填充1,其餘位填充0。填充完後,信息的長度就是512*N+448。
之後,用剩餘的位置(512-448=64位)記錄原文的真正長度,把長度的二進制值補在最後。這樣處理後的信息長度就是512*(N+1)。
第二步:設置初始值
MD5的哈希結果長度為128位,按每32位分成一組共4組。這4組結果是由4個初始值A、B、C、D經過不斷演變得到。
第三步:循環加工
這一步是最復雜的一步,我們看看下面這張圖,此圖代表了單次A,B,C,D值演變的流程。
圖中,A,B,C,D就是哈希值的四個分組。每一次循環都會讓舊的ABCD產生新的ABCD。一共進行多少次循環呢?由處理後的原文長度決定。
假設處理後的原文長度是M
主循環次數 = M / 512
每個主循環中包含 512 / 32 * 4 = 64 次 子循環。
上面這張圖所表達的就是 單次子循環 的流程。
1.圖中的綠色F,代表非線性函數
2.紅色的田字代表相加
3.黃色的<<<S(左移S位)
4.Mi是第一步處理後的原文。在第一步中,處理後原文的長度是512的整數倍。把原文的每512位再分成16等份,命名為M0 M15,每一等份長度32。在64次子循環中,每16次循環,都會交替用到M1 M16之一。
5.ki 一個常量,在64次子循環中,每一次用到的常量都是不同的
第四步:拼接結果
這一步就很簡單了,把循環加工最終產生的A,B,C,D四個值拼接在一起,轉換成字元串即可。
SHA演算法與MD5區別
SHA-1演算法,核心過程大同小異,主要的不同點是把160bit的信息摘要分成了A,B,C,D,E五段。
SHA-2系列演算法,核心過程更復雜一些,把信息摘要分成了A,B,C,D,E,F,G,H八段。
其中SHA-256的每一段摘要長度是32bit,SHA-512的每一段摘要長度是64bit。SHA-224和SHA-384則是在前兩者生成結果的基礎上做出裁剪。
⑹ 1.1 信息摘要演算法簡介
數據摘要演算法(信息摘要)是密碼學演算法中非常重要的一個分支,它通過對所有數據提取指紋信息以實現數據簽名、數據完整性校驗等功能,由於演算法具有其不可逆性,有時候也會被用做敏感信息加密。
消息摘要演算法(雜湊演算法,哈希演算法)的主要特徵是加密過程不需要密鑰,並且經過加密的數據無法被解密,只有輸入相同的明文數據經過相同的消息摘要演算法才能得到相同的密文。
一般地,把對一個信息的摘要稱為該消息的指紋或數字簽名,信息摘要演算法的主要用途是 信息完整性校驗 ,就好比我們接到一個快遞,肯定都會先確定快遞包裝是否完整,有沒有被人打開過,裡面的東東有沒有被人動過。
在計算機領域,我們也希望能知道別人傳遞的消息是否完整、是否有被篡改,這里就用到信息摘要演算法。
舉例:我們傳遞 password 時,需要將 password 加 salt 後做信息摘要,接收方核對摘要,相同則接受處理,不相同則認為本次的 password 傳輸過程中被篡改,拒絕本次請求。
信息摘要演算法來源於 CRC演算法 ,最初 CRC演算法 是用來驗證數據完整性的,即我們常見的 奇偶校驗碼 、 循環冗餘校驗返物鎮 ,在CRC基礎上發展出了MD和SHA兩大演算法家族,螞液CRC比這些演算法都要早,MD演算法比SHA演算法早,SHA演算法是對MD演算法的改進。再後來則發展出了可以帶有密碼的信息摘要演算法- MAC演算法 。
信息摘要演算法包括三大類,MD、SHA和MAC演算法,MD的分類是按照版本規定的,SHA一漏粗般是按照產生的消息長度分類的,但是SHA系列演算法在學術上會按照演算法版本區分SHA-0、SHA-1、SHA-2、SHA-3,
MAC演算法是Hmac加融合的其他算來命名的。
下表是主要的信息摘要演算法的特點比較,關於MD5、SHA1等演算法的具體過程,非安全、演算法專業人士可不學習,如有需要可以參考下面的維基網路:
美國對於演算法出口有著嚴格的限制,Sun公司(現在應該是甲骨文了)限於美國演算法出口法律的限制和本身的一些原因,並有提供特別全面的演算法支持,不過java的加密模塊被設計為:以SPI方式提供演算法具體實現,可以用來透明的接入其他演算法供應商,通過SPI機制可以直接使用其他演算法供應商的jar包工具。
在Java中主要的演算法供應商有三類:Sun本身的演算法,包含在JDK中,大部分在JDK 1.6之後,Bouncy Castle和Commons Codec。
⑺ 摘要演算法的分類
1、CRC8、CRC16、CRC32
CRC(Cyclic Rendancy Check,循環冗餘校驗)演算法出現時間較長,應用也十分廣泛,尤其是通訊領域,現在應用最多的就是 CRC32 演算法,它產生一個4位元組(32位)的校驗值,一般是以8位十六進制數,如FA 12 CD 45等。CRC演算法的優點在於簡便、速度快,嚴格的來說,CRC更應該被稱為數據校驗演算法,但其功能與數據摘要演算法類似,因此也作為測試的可選演算法。
在 WinRAR、WinZIP 等軟體中,也是以 CRC32 作為文件校驗演算法的。一般常見的簡單文件校驗(Simple File Verify – SFV)也是以 CRC32演算法為基礎,它通過生成一個後綴名為 .SFV 的文本文件,這樣可以任何時候可以將文件內容 CRC32運算的結果與 .SFV 文件中的值對比來確定此文件的完整性。
與 SFV 相關工具軟體有很多,如MagicSFV、MooSFV等。
2、MD2 、MD4、MD5
這是應用非常廣泛的一個演算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要演算法版本5),它由MD2、MD3、MD4發展而來,由Ron Rivest(RSA公司)在1992年提出,被廣泛應用於數據完整性校驗、數據(消息)摘要、數據加密等。MD2、MD4、MD5 都產生16位元組(128位)的校驗值,一般用32位十六進制數表示。MD2的演算法較慢但相對安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。
在互聯網上進行大文件傳輸時,都要得用MD5演算法產生一個與文件匹配的、存儲MD5值的文本文件(後綴名為 .md5或.md5sum),這樣接收者在接收到文件後,就可以利用與 SFV 類似的方法來檢查文件完整性,絕大多數大型軟體公司或開源組織都是以這種方式來校驗數據完整性,而且部分操作系統也使用此演算法來對用戶密碼進行加密,另外,它也是目前計算機犯罪中數據取證的最常用演算法。
與MD5 相關的工具有很多,如 WinMD5等。
3、SHA1、SHA256、SHA384、SHA512
SHA(Secure Hash Algorithm)是由美國專門制定密碼演算法的標准機構—— 美國國家標准技術研究院(NIST)制定的,SHA系列演算法的摘要長度分別為:SHA為20位元組(160位)、SHA256為32位元組(256位)、 SHA384為48位元組(384位)、SHA512為64位元組(512位),由於它產生的數據摘要的長度更長,因此更難以發生碰撞,因此也更為安全,它是未來數據摘要演算法的發展方向。由於SHA系列演算法的數據摘要長度較長,因此其運算速度與MD5相比,也相對較慢。
SHA1的應用較為廣泛,主要應用於CA和數字證書中,另外在互聯網中流行的BT軟體中,也是使用SHA1來進行文件校驗的。
4、RIPEMD、PANAMA、TIGER、ADLER32 等
RIPEMD是Hans Dobbertin等3人在對MD4,MD5缺陷分析基礎上,於1996年提出來的,有4個標准128、160、256和320,其對應輸出長度分別為16位元組、20位元組、32位元組和40位元組。
TIGER由Ross在1995年提出。Tiger號稱是最快的Hash演算法,專門為64位機器做了優化。