freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計-基于java的校園在線訂餐網(wǎng)站的設(shè)計和實現(xiàn)-資料下載頁

2025-11-24 19:29本頁面

【導(dǎo)讀】不斷發(fā)展,傳統(tǒng)媒體逐漸向網(wǎng)絡(luò)靠攏,網(wǎng)絡(luò)上的信息資源增長迅猛。人們迫切需要一個可以對大量新聞信息進(jìn)行提煉、壓縮的工具,自動。課題中引用了英文語言處理工具StanfordCoreNLP. 現(xiàn)了新聞自動摘要系統(tǒng)。

  

【正文】 設(shè)計與實現(xiàn) 摘要分類 在設(shè)計和實現(xiàn)新聞?wù)K之前,我們首先需要進(jìn)行對用戶摘要類型的判斷,系統(tǒng)使用了四個 boolean 變量來標(biāo)注當(dāng)前摘要類型。 private boolean stateOfQuery = false。 //是否是單文檔 private boolean stateOfMulti = false。 //是否是多文檔 private boolean stateEnglish = true。 //是否是英文摘要 private boolean stateChinese = false。//是否是中文摘要 stateOfQuery 用來指示是否是查詢摘要, stateOfMulti 用來指示是否是多文檔摘要。 stateEnglish 用來指示是否是生成英文摘要, stateChinese 用來指示是否是生成中文摘要,由于進(jìn)度問題,暫時沒有實現(xiàn)對中文的自動文章。 這里我們引入一個了文件選擇器類 JFileChooser,使用該類 來從本地讀入文本文件。 JFileChooser fileChooser = new JFileChooser()。//創(chuàng)建文件選擇對話框 (stateOfMulti)。 FileFilter filter = new FileNameExtensionFilter(文本文件 , txt)。 (filter)。 int i = (getContentPane())。 if (i == ) { if (stateOfMulti == false) {//單文檔 } else {//多文檔 } }//END OF 打開 其中 (getContentPane())用來打開顯示文件選擇對話框,系統(tǒng)會根據(jù)自動文摘的分類來判斷是否允許進(jìn)行多文檔的輸入。 對應(yīng)于摘要的不同分類,項目中使用了四個類分別處理 對應(yīng)的摘要類型,但是由于摘要類型比較形似,所以這里介紹最為復(fù)雜的多文檔查詢相關(guān)摘要類型。 基于特征信息提取的自動文摘系統(tǒng)的結(jié)構(gòu)框架如圖 41。 南京郵電大學(xué)通達(dá)學(xué)院 2021屆本科生畢業(yè)設(shè)計(論文) 17 圖 41 自動摘要結(jié)構(gòu)框架圖 摘要步驟如下: 文本預(yù)處理首先是統(tǒng)計詞頻,這里我們使用一個映射來存儲詞頻: ListHashMapString, Double termFrequency 其中 list 是為了區(qū)分多條新聞, map 則是一個單詞和詞頻的鍵值對。 for (CoreMap sentence : sentences) {//統(tǒng) 計詞頻,計算 TF 的第一步 sentence_count++。 for (CoreLabel token : ()) { words_count++。 String lemma = ()。 if (((index).get(word)) == null) { (index).put(word, )。 } else { double count = (index).get(word)。 count++。 (index).put(word, count)。 } } } 由于是多文檔,每一條新聞的長度不一樣,所以說如果只是統(tǒng)計詞出現(xiàn)的次數(shù),那么摘要會偏向文章內(nèi)容較長的新聞,所以我們在多文檔的情況下并不是直接使用單詞出現(xiàn)的次數(shù)作為詞頻,而是使用相對詞頻,可以避免摘要偏向于文章內(nèi)容較長的新聞 ,相對詞頻的計算如式 41: 文章的總次數(shù) 次數(shù)某個詞在文章中出現(xiàn)的)詞頻( ?TF (式 41) 統(tǒng)計完相對詞頻后,我們需要過濾掉停用詞,首先我們從本地讀入停用詞文本文件,然后使用一個集合工具類 Arrarlist 存儲停用詞。 原 始新聞 文本預(yù)處理 文摘輸出 相似度計算 候選語句 句子權(quán)重計算 句子位置 查詢詞處理 詞權(quán)計算 南京郵電大學(xué)通達(dá)學(xué)院 2021屆本科生畢業(yè)設(shè)計(論文) 18 ArrayListString stopWordTable = new ArrayListString()。 String filePath = new String()。 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)))。 for (String line = ()。 line != null。 line = ()) { String word = ()。 (word)。 } ()。 接下來,我們對詞頻表里的單詞進(jìn)行過濾,如果單詞出現(xiàn)在停用詞里 ,那么就將其從文章詞頻里去除。 for (int i = 0。 i ()。 i++) { HashMapString, Double tempFre = (i)。 SetString set = ()。 IteratorString itr = ()。 while (()) { String str = ()。 if ((str)) { ()。 } } } 在計算完相對詞頻和過濾掉停用詞之后,會遇到了另一個問題,這里我們暫時先用中文舉例,我們可能發(fā)現(xiàn)如果一篇文章中 中國 、 蜜蜂 、 養(yǎng)殖 這三個詞的出現(xiàn)次數(shù)一樣多。這是不是意味著,作為關(guān)鍵詞,它們的重要性是一樣的?顯然不是這樣。因為 中國 是很常見的詞,相對而言, 蜜蜂 和 養(yǎng)殖 不那么常見。如果這三個詞在一篇文章的出現(xiàn)次數(shù)一樣多,有理由認(rèn)為, 蜜蜂 和 養(yǎng)殖 的重要程度要大于 中國 ,也就是說 ,在關(guān)鍵詞排序上面, 蜜蜂 和 養(yǎng)殖 應(yīng)該排在 中國的前面。所以,我們需要一個重要性調(diào)整系數(shù),衡量一個詞是不是常見詞。如果某個詞比較少見,但是它在這篇文章中多次出現(xiàn),那么它很可能就反映了這篇文章的特性,正是我們所需要的關(guān)鍵詞。 用統(tǒng)計學(xué)語言表達(dá),就是在詞頻的基礎(chǔ)上,要對每個詞分配一個 重要性 權(quán)重。這里我們還是先暫時用中文表示,最常見的詞( 的 、 是 、 在 )給予最小的權(quán)重,較常見的詞( 中國 )給予較小的權(quán)重,較少見的詞( 蜜蜂 、 養(yǎng)殖 )給予較大的權(quán)重。這個權(quán)重叫做 逆文檔頻率 ( Inverse Document Frequency,縮寫為IDF),它的大小與一個詞的常見程度成反比。 IDF 的定義如式 42: 南京郵電大學(xué)通達(dá)學(xué)院 2021屆本科生畢業(yè)設(shè)計(論文) 19 )1(l og)( ?? 包含該詞的文檔數(shù) 語料庫的文檔總數(shù)逆文檔頻率 ID F (式 42) 如果一個詞越常見,那么分母就越大,逆文檔頻率就越小越接近 0。分母之所以要加 1,是為了避免分母為 0(即所有文檔都不包含該詞)。 log 表示對得到的值取對數(shù)。接下來我們計算有意義的單詞的 IDF,類似于 TF 的計算,同樣定義一個映射來存儲單詞的逆文檔頻率: HashMapString, Double wordIDF 逆文檔頻率的計算如下: while (()) { String word = ()。 int containNews = 0。 double word_IDF = 。 for (int i = 0。 i ()。 i++) { String news = (i)。 Annotation document = new Annotation(news)。 (document)。 ListCoreMap sentences = ()。 ok: for (CoreMap sentence : sentences) { for (CoreLabel token : ()) { String wordtemp = ()。 String lemma = ()。 if ((word) || (word)) { containNews++。 break ok。 } } } } word_IDF = ( * () / (containNews))。 } 其中 containNews 記錄著包含某個單詞的新聞的數(shù)量。需要注意的是,我們在遍歷新聞中每個句子,判斷某個句子是否包含某個單詞的時候,因為英文單詞存在分詞形式的變化,所以需要對匹配的單詞進(jìn)行詞形還原,不能簡單的使用 Java的 String 類提供的 contain 方法。 每個單詞的權(quán)重計算如式 43: 南京郵電大學(xué)通達(dá)學(xué)院 2021屆本科生畢業(yè)設(shè)計(論文) 20 )()( I D FTFI D FTF 逆文檔頻率詞頻 ??? (式 43) 可以看到, TFIDF 與一個詞在文檔中的出現(xiàn)次數(shù)成正比,與該詞在整個語料庫中的出現(xiàn)次數(shù)成反比。所以,自動提取關(guān)鍵詞的算法 就很清楚了,就是計算出文檔的每個詞的 TFIDF 值,然后按降序排列,取排在最前面的幾個詞。有了單詞的 IDF 和每篇新聞單詞的 TF,就可以開始計算每篇新聞里每個單詞的具體權(quán)重了。 while (()) { String, Double entry = (EntryString, Double) ()。 String key = ()。 Double word_TF = ()。 Double word_IDF = (key)。 (key, word_TF * word_IDF)。 } 在計算出單詞的權(quán)重之后,統(tǒng)計出權(quán)重里的最大值,賦值給查詢詞 double max = 0。 for (int i = 0。 i () 1。 i++) { if ((i + 1) (i)) max = (i + 1)。 } 調(diào)整每篇文章的 tfidf,將查詢詞的值設(shè)為最大 for (int i = 0。 i ()。 i++) { String text = (i)。 Annotation document = new Annotation(text)。 (document)。 ListCoreMap sentences = ()。 next: for (CoreMap sentence : sentences) { for (CoreLabel token : ()) { String wordtemp = ()。 String lemma = ()。 if ((queryWord) || (queryWord)) { HashMapString, Double tempTFIDF = (i)。 (queryWord, max)。 break next。 } } } 南京郵電大學(xué)通達(dá)學(xué)院 2021屆本科生畢業(yè)設(shè)計(論文) 21 } 這里程序?qū)懙牟皇呛芤?guī)范,出現(xiàn)了 goto 語句,但是因為涉及到三層循環(huán),如果使用標(biāo)志位來判斷,邏輯上有點(diǎn)復(fù)雜,所以直接使用了 goto 語句。 有了所有單詞的權(quán)重,下面就是計算句子的權(quán)重。對于句子的權(quán)重,初始時句子權(quán)重為 0,我們是統(tǒng)計該句子包含了 那些有意義的單詞,進(jìn)行對應(yīng)的權(quán)重求和。 for (CoreMap sentence : sentences) { double sentenceValue = 0。 IteratorEntryString, Double itrWordTF_IDF = ().iterator()。 while (()) { String, Double entry = (EntryString, Double) ()。 String word = ()。 for (CoreLabel token : ()) { String wordtemp = ()。 String lemma = ()。 if ((word) || (word)) { double wordValue = ()。 sentenceValue = (())。 sentenceValue = sentenceValue + wordValue。 ((), sentenceValue)。 } } } sentenceValue = sentenceValue / (().length())。 ((), sentenceValue)。 } 其中,在對句子進(jìn)行權(quán)重計算的時候需要考慮句子的長度。如果不考慮長度的話,摘要會偏向于長句,這會影響摘要的生成質(zhì)量。 接下來對原文中的所有句子按權(quán)值高低降序排列,權(quán)值最高的若干句子被確定為文摘句。首先對句子按權(quán)重排序 (sentenceKeys, new ComparatorObject(){..})。 接著按照句子的權(quán)重和出現(xiàn)位置(相鄰句子選權(quán)重大者)構(gòu)成臨時摘要 ArrayListString tempSum = new ArrayListString()。 ((0
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1