免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
自然語言處理專家個人主頁信息自動抽取
飲水思源 - 主題文章閱讀  [討論區(qū): Cantonese] [回復本文] 發(fā)信人:Dillon(狄龍), 信區(qū): Cantonese標 題: 自然語言處理專家個人主頁信息自動抽取發(fā)信站: 飲水思源 (2004年06月08日15:25:44 星期二), 站內信件自然語言處理專家個人主頁信息自動抽取班  級:F0003301學生姓名:梁永堅指導教師:李芳 [題目]摘要[摘要正文摘要正文摘要正文摘要正文摘要正文摘要正文。]關鍵詞:[關鍵詞1],[關鍵詞2] [TITLE]ABSTRACT[Body of abstract.]KEY WORDS:[Key Word 1], [Key Word 2] 目錄1. 概述 11.1 計算語言學介紹 11.2 應用背景 21.3 上海交通大學計算語言學虛擬信息中心簡介 21.4 各章節(jié)介紹 22. 信息抽取系統(tǒng)的設計 32.1 信息抽取技術簡介 32.1.1 信息抽取的定義 32.1.2 信息抽取的產生 32.1.3 信息抽取的工作流程 32.1.4 信息抽取的關鍵技術 42.2 “個人主頁”信息抽取系統(tǒng)的設計 42.2.1 個人主頁的自動搜索 42.2.2 自然語言專家的判別 52.2.3 專家信息的自動抽取 52.3 演示系統(tǒng)的界面 53. 專家信息自動抽取的實現(xiàn) 73.1 開發(fā)環(huán)境以及開發(fā)工具的介紹 73.1.1 Java2 SDK 1.4.2 Standard Edition 73.1.2 IntelliJ IDEA (With MySQL connector) 73.1.3 ICTCLAS 計算所分詞系統(tǒng) 83.2 系統(tǒng)界面的實現(xiàn) 83.2.1 界面部分的實現(xiàn) 83.2.2 線程的實現(xiàn) 123.3 專家數(shù)據(jù)庫的介紹 133.4 抽取前端的實現(xiàn) 143.4.1 主頁的下載并對主頁文本的分詞 143.4.2 匹配分詞結果 163.4.3 整理匹配結果 203.5 各個字段的抽取方法 213.5.1 共通性特征 213.5.2 姓名的抽取 223.5.3 職稱的抽取 223.5.4 電子郵件的抽取 233.5.5 電話的抽取 233.5.6 聯(lián)系地址的抽取 233.5.7 工作單位的抽取 243.5.8 所屬學科的抽取 243.5.9 參與項目的抽取 253.5.10 研究方向的抽取 254. 運行結果及分析 254.1 系統(tǒng)運行的結果 254.1.1 穩(wěn)定性測試 254.1.2 正確性測試 264.2 有關問題總結和系統(tǒng)的改進建議 264.2.1 分詞系統(tǒng)的更換 264.2.2 索引的絕對化 264.2.3 權值的重分配 274.2.4 抽取算法的優(yōu)化 275. 參考文獻 276. 致謝 277. 附錄 287.1 ICTCLAS詞性標記集規(guī)范 287.2 系統(tǒng)使用幫助 29 1. 概述1.1 計算語言學介紹(1) 計算語言學的產生計算語言學(Computational Linguistics)指的是這樣的一門學科,它通過建立形式化的數(shù)學模型,來分析、處理自然語言,并在計算機上用程序來實現(xiàn)分析和處理的過程,從而達到以機器來模擬人的部分乃至全部語言能力的目的。[1](2) 計算語言學的研究范疇[7]計算語言學為利用計算機處理語言信息(包括語言中信息成分的發(fā)現(xiàn)和提取,語言數(shù)據(jù)的存儲、加工和傳輸,語言的翻譯和理解)提供理論模型、計算方法和實現(xiàn)技術,因此考慮問題都是站在計算機的立場上的,這同過去以人為對象的語言研究有著明顯的不同。稍微學過一點英語的中國人都不難把第一次見到的下面兩句英語正確地翻譯成漢語。 I bought a table with three legs.(我買了一張有三條腿的桌子。) I bought a table with three dollars.(我花三美元買了一張桌子。)計算機要翻譯這兩句話,卻碰到了不易處理的歧義結構問題。盡管當代計算機的存儲容量極大,但也不可能一一記住所有英語句子的漢語譯文。計算機不難記住數(shù)量有限的英語句子結構及其對應的漢語句子結構。一般地說,計算機系統(tǒng)里有了這樣的知識,就可以通過句法分析和查詞典實現(xiàn)自動翻譯了。這一步算是句法理論(syntax)的成就。上述兩個句子的結構都是: 名詞短語+動詞+名詞短語+介詞短語最后的介詞短語既可以修飾句中的動詞,也可以修飾后一個名詞短語。要計算機針對具體的句子決定取舍,可就犯難了。因此要以某種形式給計算機灌輸諸如“桌子有腿,用美元可以購物”之類的知識,并要教會計算機如何運用這些知識,這屬于語義學(semantics)和語義分析的研究范圍。在很多情況下,計算機死記住一些靜態(tài)的知識還不能消解這種結構的歧義,還要學會分析上下文和談話的環(huán)境,從語境中獲取并活用動態(tài)的知識,這又要靠語用學(pragmatics)和語境分析(context analysis) 發(fā)揮作用了。除了要分析語言,文章生成(text generation)也是一門學問。以上理論都是建立在基于規(guī)則的語言模型上的?;谝?guī)則的理論模型用于指導語言信息處理實踐歷史雖久,卻常常捉襟見肘。與此同時,計算機技術飛躍進步,這又推動了基于統(tǒng)計模型的語料庫語言學(corpus linguistics)的發(fā)展。同樣,基于統(tǒng)計的理論模型也有其自身的局限性。 有機結合兩種模型,不斷地實踐,并吸收相關學科(如腦科學,認知科學等)的成果,人類理解語言的奧秘總會被逐步揭開,模擬這個過程的自然語言處理系統(tǒng)也會逐漸接近真正理解的目標。語言信息處理是數(shù)字計算機在非數(shù)值領域的最早應用,50年來,雖歷經坎坷,終究取得了長足的進步,并在社會生活中發(fā)揮作用。計算語言學從定名起,也有了30多年的歷史,已成為一個穩(wěn)定而且活躍的學科。1.2 應用背景本系統(tǒng)的設計實現(xiàn)是在虛擬信息中心建立以后。由于當今數(shù)據(jù)量巨大,已經不再可能通過人手統(tǒng)計。為了完善虛擬信息中心,在最初的生產實習中是通過人為統(tǒng)計的,效率非常低。在信息抽取技術相對成熟的今天,利用信息抽取的方法取代人為統(tǒng)計成為可能。本系統(tǒng)就是在此背景下設計并且實現(xiàn)的,采用信息抽取的技術,從互聯(lián)網中搜索并抽取需要的信息完善虛擬信息中心。1.3 上海交通大學計算語言學虛擬信息中心簡介《上海交通大學計算語言學虛擬信息中心》于2003年作為朱曉明的畢業(yè)設計[1]所創(chuàng)建,其設計來源于LT-World(語言技術世界,www.lt-world.org)。《交大計算語言學虛擬信息中心》的設計目的是構造一個收集國內NLP專家資料的數(shù)據(jù)庫,模仿LT-World向業(yè)界內發(fā)放。本中心的主頁面如下所示: 1.4 各章節(jié)介紹本文的第2章簡單了本系統(tǒng)用到的信息抽取技術并且對本系統(tǒng)的設計作了一個大體的概括。第3章是整個系統(tǒng)的詳細設計與實現(xiàn),是本文的主題部分。第4章是實驗的結果并且提出了一些問題已經改進建議。2. 信息抽取系統(tǒng)的設計2.1 信息抽取技術簡介2.1.1 信息抽取的定義信息抽?。↖nformation Extraction),指從一段文本中抽取指定的一類信息并將其形成結構化的數(shù)據(jù)填入一個數(shù)據(jù)庫中供用戶查詢使用的過程。[2]MUC(Message Understanding Conference)定義的文本抽?。簭募兾谋咀址问降奈谋局刑崛⌒畔⒉⑦M行處理,將其放入標記了可填入信息類型的槽中。[2]如:<NAMEX>George Bush</NAMEX><WEAPON>Cannon</WEAPON>2.1.2 信息抽取的產生隨著計算機的普及以及互聯(lián)網(WWW)的迅猛發(fā)展,大量的信息以電子文檔的形式出現(xiàn)在人們面前。為了應對信息爆炸帶來的嚴重挑戰(zhàn),迫切需要一些自動化的工具幫助人們在海量信息源中迅速找到真正需要的信息。信息抽?。↖nformation Extraction)研究正是在這種背景下產生的。[3]2.1.3 信息抽取的工作流程Hobbs曾提出一個信息抽取系統(tǒng)的通用體系結構[13],他將信息抽取系統(tǒng)抽象為“級聯(lián)的轉換器或模塊集合,利用手工編制或自動獲得的規(guī)則在每一步過濾掉不相關的信息,增加新的結構信息”。Hobbs認為典型的信息抽取系統(tǒng)應當由依次相連的十個模塊組成:① 文本分塊:將輸入文本分割為不同的部分——塊。② 預處理:將得到的文本塊轉換為句子序列,每個句子由詞匯項(詞或特定類型短語)及相關的屬性(如詞類)組成。③ 過濾:過濾掉不相關的句子。④ 預分析:在詞匯項(Lexical Items)序列中識別確定的小型結構,如名詞短語、動詞短語、并列結構等。⑤ 分析:通過分析小型結構和詞匯項的序列建立描述句子結構的完整分析樹或分析樹片段集合。⑥ 片段組合:如果上一步沒有得到完整的分析樹,則需要將分析樹片段集合或邏輯形式片段組合成整句的一棵分析樹或其他邏輯表示形式。⑦ 語義解釋:從分析樹或分析樹片段集合生成語義結構、意義表示或其他邏輯形式。⑧ 詞匯消歧:消解上一模塊中存在的歧義得到唯一的語義結構表示。⑨ 共指消解或篇章處理:通過確定同一實體在文本不同部分中的不同描述將當前句的語義結構表示合并到先前的處理結果中。⑩ 模板生成:由文本的語義結構表示生成最終的模板。當然,并不是所有的信息抽取系統(tǒng)都明確包含所有這些模塊,并且也未必完全遵循以上的處理順序,比如6、7兩個模塊執(zhí)行順序可能就相反。但一個信息抽取系統(tǒng)應當包含以上模塊中描述的功能。[3]2.1.4 信息抽取的關鍵技術(1) 命名實體識別命名實體是文本中最基本的要素,要正確地理解文本就要正確地識別命名實體。命名實體可以表示現(xiàn)實世界中的抽象或者具體的事物,諸如姓名、單位、公司名、時間、地點等等。但是命名實體還是需要根據(jù)實際情況確定的。在本畢業(yè)設計中,有如下命名實體:姓名、職稱、單位、學科、電話、地址、E-Mail、主頁、項目和研究方向。(2) 句法分析句法分析得到輸入的某種結構表示,如完整的分析樹或分析樹片段集合,是計算機理解自然語言的基礎。[3](3) 篇章分析和推理通過為了準確而沒有遺漏地從文本中抽取相關信息,信息抽取系統(tǒng)必須能夠識別文本中的共指現(xiàn)象,進行必要的推理,以合并描述同一事件或實體的信息片段。因此,篇章分析、推理能力對信息抽取系統(tǒng)來說是必不可少的。[3]在本畢業(yè)設計中,只涉及到命名實體的識別,屬于一種淺層的信息抽取。2.2 “個人主頁”信息抽取系統(tǒng)的設計2.2.1 個人主頁的自動搜索個人主頁的自動搜索可以從兩方面入手,其一就是URL,個人主頁的URL都具有一定的特性,比如~、#、?name= 等符號特征,屬于淺層的搜索;其二就是網頁的內容,個人主頁的內容可能含有相似的關鍵字,諸如簡介、XX的主頁之類的字眼。對個人主頁的識別主要的方法是對滿足某一特征的網頁加以一個權值,權值達到某一固定值就可以判斷該網頁屬于個人主頁。每一特征的權值以及權值的界限都必須經過大量試驗來驗證,才能獲得很好的結果。此種方法屬于一種經驗型的方法,可以看到在后面的自然語言專家的判別也用到了這種方法。此方法的好處是隨著試驗的越來越多,系統(tǒng)會更加完善。個人主頁的搜索還用到了廣度搜索,對初始網頁廣度遞增的搜索,搜索到第五層即結束。用廣度搜索代替深度搜索可以更快的得到結果,主要是可以在早期排除深層次的非個人主頁。整個過程都在維護一張先進先出的表,表里面保存的是按照廣度搜索對第一個頁面的不停向下搜索所得到的URL。然后對表里面的URL做檢查,判斷出個人主頁。2.2.2 自然語言專家的判別自然語言專家的判別也用了跟個人主頁判斷相似的辦法,就是對含有某一關鍵字的網頁加權,如果到達某一權值就判斷該網頁屬于自然語言專家的個人主頁。但是關鍵字的選取就具有一定的難度,主要是關鍵字的選取。最后,關鍵字的選取由已知的NLP專家的個人主頁統(tǒng)計得出,約50個高頻詞匯。自然語言專家的判別主要分兩步,第一步是個人主頁的判別,第二步是自然語言專家的判別。2.2.3 專家信息的自動抽取專家信息的自動抽取是一種命名實體的抽取,并夾帶著少量的推理。抽取采用了有限自動機的方法,對靈活的規(guī)則進行匹配。當然,匹配的基本元素不能采用落后的字符,這樣的話就失去了中文詞語原有的特性。取而代之的是單個詞,采用了ICTCLAS的分詞系統(tǒng)對文本進行分詞。對匹配后的大量結果進行附加特性以及整理就得到了中間結果。最后對每一類的命名實體采用不同的抽取方法,其中用到最簡單的推理。最后的結果的正確性是基于兩方面的,一方面是ICTCLAS的分詞的準確性,另一方面是抽取算法的好壞。最后的抽取結果可以保存到現(xiàn)在的計算語言學虛擬信息中心。2.3 演示系統(tǒng)的界面主程序界面 主界面包括6部分。① 菜單,如下所示: 菜單包含了所有操作的選擇,另外附帶一個初始化菜單,用于將整個系統(tǒng)初始化。② 初始化URL,用于輸入搜索的入口URL,整個系統(tǒng)將從這個URL入手搜索。③ 個人主頁列表,用于收集搜索到的個人主頁。④ NLP個人主頁列表,用于收集判斷為NLP專家的頁面。⑤ 快捷按鈕,實現(xiàn)菜單的功能的快捷鍵。⑥ 當前狀態(tài),有兩個數(shù)字,一個是個人主頁的數(shù)量,另一個是NLP主頁的數(shù)量。規(guī)則管理器界面 規(guī)則管理器界面上方是一個規(guī)則列表,下方是選定的規(guī)則的詳細信息列表,右方有一系列操作按鈕。規(guī)則管理器的操作將會在附錄中說明。信息抽取結果顯示界面 3. 專家信息自動抽取的實現(xiàn)3.1 開發(fā)環(huán)境以及開發(fā)工具的介紹3.1.1 Java2 SDK 1.4.2 Standard Edition采用Java開發(fā)是因為Java具有平臺無關性,開發(fā)出來的軟件可以跨平臺使用。而且Java是一種相當好的語言,可以保證出現(xiàn)最小的錯誤,減少程序員的失誤。Java2 SDK 1.4.2 SE是Java2開發(fā)包標準版的最新版本。在這個版本中,已經包含了java.util.regex包,包里面包含了兩個類Pattern、Matcher。因此,此版本J2SDK已經可以根據(jù)正則表達式匹配字符串了。3.1.2 IntelliJ IDEA (With MySQL connector)(1) IntelliJ IDEA 4.0IntelliJ IDEA是一個相對較新的Java IDE。高度優(yōu)化的IntelleJIdea使普通任務變得相當容易。通常不是較大的標簽特性使一個產品真正有用。而是這些小的方面:里面的許多小的細節(jié)使整個包無縫集成及樂于使用。IntelliJ IDEA具有如下特征:感知語法詞選擇 多種導航形式 本地歷史 靈活JUnit支持 整合支持代碼助手 代碼重格式化 XML支持 直觀簡潔的GUI FS自動同步定制的鍵盤映射 錯誤高亮顯示 代碼檢查 完全理解JSP 靈巧的編輯功能支持EJB 靈巧的模板 代碼實現(xiàn)支持 集成Ant 無代碼高亮顯示技巧眾多 有規(guī)律的查找 快速JavaDoc 意識動作 幾乎沒有向導(2) MySQL connector for java 3.0.11 stable這是MySQL的連接驅動的最新穩(wěn)定版。在java的開發(fā)包中并沒有包括MySQL數(shù)據(jù)庫的連接驅動,需要第三方的支持。驅動程序是一個jar的包,安裝工程里面編譯就可以正常使用了。3.1.3 ICTCLAS 計算所分詞系統(tǒng)中國科學院計算技術研究所在多年研究基礎上,耗時一年研制出了漢語詞法分析系統(tǒng)ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System),該系統(tǒng)的功能有:中文分詞;詞性標注;未登錄詞識別。分詞正確率高達97.58%(973專家組評測),未登錄詞識別召回率均高于90%,其中中國人名的識別召回率接近98%處理速度為31.5Kbytes/s。ICTCLAS的特色還在于:可以根據(jù)需要輸出多個高概率結果,有多種輸出格式,支持北大詞性標注集,973專家組給出的詞性標注集合。計算所漢語詞法分析系統(tǒng)ICTCLAS同時還提供一套完整的動態(tài)連接庫ICTCLAS.dll和相應的概率詞典,開發(fā)者可以完全忽略漢語詞法分析,直接在自己的系統(tǒng)中調用ICTCLAS,ICTCLAS可以根據(jù)需要輸出多個高概率的結果,輸出格式也可以定制,開發(fā)者在分詞和詞性標注的基礎上繼續(xù)上層開發(fā)。3.2 系統(tǒng)界面的實現(xiàn)整個系統(tǒng)界面都是獨立于系統(tǒng)的內核的,系統(tǒng)界面的實現(xiàn)包括兩部分,其一就是界面部分的設計,其二就是線程的獨立運作部分。整個系統(tǒng)界面都放在UI這個包里面,而線程就放在UI.Runner包里面。由于要實現(xiàn)平臺無關性,所以并沒有使用IDEA所攜帶的UI編輯器對用戶界面進行編輯,取而代之的是手動實現(xiàn),而且這樣顯得更加靈活。3.2.1 界面部分的實現(xiàn)其中只有主界面是JFrame,其他幾面都是JDialog。詳細功能見下表:類名 基類 功能MainFrame JFrame 主界面的整個界面設計MessageDialog JDialog 信息抽取后的顯示信息界面RulemanagerDialog JDialog 規(guī)則管理器的界面ErrorDialog JDialog 錯誤報告的界面AboutDialog JDialog 關于界面(1) MainFrame主界面MainFrame包含了兩個非可視化容器的屬性,分別是URL_LIST和NLP_LIST,都是Vector類型,用于保存當前的個人主頁和NLP主頁的列表。為什么要使用Vector了,是因為需要嵌入到Jlist中作為數(shù)據(jù)顯示。所以MainFrame的兩個對應的非常重要的容器就是URL_List和NLP_List,分別將URL_LIST和NLP_LIST作為鏈表數(shù)據(jù)。只要刷新整個UI,兩個Vector里面的數(shù)據(jù)將會通過兩個JList顯示出來。MainFrame相對其他JDialog的差別還在于多了一個菜單,整個菜單只有單級菜單,這是因為菜單項比較少的緣故。但是菜單項仍然分類顯示,分4項。第一是功能項,即“獲取個人網站”、“過濾NLP個人主頁”、“獲取網頁信息”三項;其次是“規(guī)則管理器”,這一項是獨立出來作為系統(tǒng)配置項的;再次是“系統(tǒng)初始化”,用于對系統(tǒng)的還原;最后是“退出”。MainFrame還包括三個快捷按鈕和一個信息提示框。三個快捷按鈕對應著菜單功能項的三個功能,置于整個界面的右方偏上,使得系統(tǒng)在使用上比較方便。在快捷按鈕下方有一組信息提示,包括兩個列表當前URL的個數(shù)。MainFrame屬性表屬性 類型 說明URL_LIST Vector 保存?zhèn)€人主頁的向量NLP_LIST Vector 保存NLP個人主頁的向量menubar JMenuBar 菜單模塊menu_system JMenu 0級系統(tǒng)菜單模塊menu_help JMenu 0級幫助菜單模塊item_geturl JMenuItem 菜單項“獲取個人主頁”item_urlfilter JMenuItem 菜單項“過濾NLP個人主頁”item_parse JMenuItem 菜單項“獲取網頁信息”item_rulemanager JMenuItem 菜單項“規(guī)則管理器”item_initial JMenuItem 菜單項“系統(tǒng)初始化”item_exit JMenuItem 菜單項“退出”item_about JMenuItem 菜單項“關于”text_firstURL JTextField 用于填寫搜索入口的URL的文本區(qū)域URL_List JList 個人主頁的顯示模塊NLP_List JList NLP個人主頁的顯示模塊btn_geturl JButton 快捷按鍵“獲取個人主頁”btn_urlfilter JButton 快捷按鍵“過濾個人主頁”btn_parse JButton 快捷按鍵“獲取網頁信息”mess_url JLabel 用于提示當前個人主頁的數(shù)量mess_nlp JLabel 用于提示當前NLP個人主頁的數(shù)量runner_get Thread 獲取個人主頁的線程runner_filter Thread 過濾個人主頁的線程MainFrame需要響應菜單以及快捷鍵。本Frame中包含兩個線程,用于響應兩個功能:“獲取個人網站”和“過濾NLP個人主頁”,對應兩個菜單項和兩個按鈕。對其他菜單項和按鈕的響應則不需要線程的支持,只需要彈出對應的窗口或者關閉程序就可以了。MainFrame事件響應表事件源 類型 說明item_geturl ActionEvent 響應菜單“獲取個人主頁”item_urlfilter ActionEvent 響應菜單“過濾NLP個人主頁”item_parse ActionEvent 響應菜單“獲取網頁信息”item_rulemanager ActionEvent 響應菜單“規(guī)則管理器”item_initial ActionEvent 響應菜單“系統(tǒng)初始化”item_exit ActionEvent 響應菜單“退出”item_about ActionEvent 響應菜單“關于”btn_geturl ActionEvent 響應按鍵“獲取個人主頁”btn_urlfilter ActionEvent 響應按鍵“過濾個人主頁”btn_parse ActionEvent 響應按鍵“獲取網頁信息”(2) MessageDialog信息抽取結果顯示對話框MessageDialog有10個文本區(qū)域、4個按鈕、1個列表和1個狀態(tài)欄組成。其中10個文本區(qū)域分別對應著數(shù)據(jù)庫中相應的10字段,用于顯示抽取結果,并且可以直接修改抽取結果以保存到數(shù)據(jù)庫中。在文本區(qū)域的下面放置了4個按鈕“上一條”、“下一條”、“保存到數(shù)據(jù)庫”和“退出”。垂下是一個錯誤報告列表,報告當前遇到的問題。最下面是狀態(tài)欄。MessageDialog屬性表屬性 類型 說明URLs Vector 保存NLP個人主頁列表的向量index int 保存當前處理的URL的位置text_name JTextField 文本域“姓名”text_job JTextField 文本域“職稱”text_url JTextField 文本域“個人主頁”text_email JTextField 文本域“電子郵件”text_tel JTextField 文本域“聯(lián)系電話”text_addr JTextField 文本域“聯(lián)系地址”text_unit JTextField 文本域“工作單位”text_sub JTextField 文本域“所屬學科”text_item JTextField 文本域“參與項目”text_tech JTextField 文本域“研究方向”btn_prev JButton 按鍵“上一條”btn_next JButton 按鍵“下一條”btn_save JButton 按鍵“保存”btn_exit JButton 按鍵“退出”list_errors JList 錯誤列表label_status JLabel 模擬狀態(tài)欄MessageDialog構造或者“上一條”、“下一條”按鈕事件,都會啟動一個線程讀取NLP個人主頁向量的當前值,然后去處理,將處理結果反饋到對話框。如果遇到錯誤,最后錯誤將會顯示在錯誤列表中。NLP個人主頁向量是MainFrame中NLP個人主頁向量的引用,隨著MainFrame得到更多的結果,向前向后搜索抽取會不停的增加URL。MessageDialog事件響應表事件源 類型 說明btn_prev ActionEvent 響應按鍵“上一條”btn_next ActionEvent 響應按鍵“下一條”btn_save ActionEvent 響應按鍵“保存到數(shù)據(jù)庫”btn_exit ActionEvent 響應按鍵“退出”響應“保存到數(shù)據(jù)庫”按鈕事件所做的操作就是查到數(shù)據(jù)庫,如果存在該記錄而且該記錄跟當前即時抽取發(fā)生沖突的時候就修改當前記錄,如果不存在該記錄就增加一條記錄,否則對數(shù)據(jù)庫沒有任何操作。數(shù)據(jù)庫的連接以及SQL語句的運行被獨立的提取出來放在Datebase.Connector的類里面作為構造函數(shù)和成員函數(shù),這樣使得對數(shù)據(jù)庫的操作在Connector之外變得透明。由于數(shù)據(jù)庫默認的編碼不是GBK,所以對數(shù)據(jù)庫的讀取和寫入必須轉碼。在Connector中有兩個靜態(tài)函數(shù)用于轉碼,是“ISO_8859-1”跟“GBK”兩種編碼的相互轉變。由于沒有找到狀態(tài)欄的專門的容器,所以用了一個JLabel代替。這樣的話必須保證JLabel里面的Text非空,否則狀態(tài)欄會消失。另外此對話框還有還有一個私有函數(shù),用數(shù)對按鍵可用性的刷新,當?shù)搅讼蛄窟呇氐臅r候,“上一條”或者“下一條”的按鍵就會失靈。(3) RulemanagerDialog規(guī)則管理器對話框RulemanagerDialog是最復雜的一個容器,它的功能就是讀入規(guī)則文件,然后對其進行修改,以更加完善系統(tǒng),使得抽取的正確性、完整性得到提高。此Dialog同樣具有兩個JList,此外還有一些按鈕和文本區(qū)域。第一個JList是用于顯示規(guī)則文件的所有記錄的,第二個JList是用于顯示規(guī)則文件的詳細信息的。此外還有,幾個文本區(qū)域用于輸入規(guī)則用的。RulemanagerDialog屬性表屬性 類型 說明rules Vector 保存所有規(guī)則的向量detail Vector 保存一條規(guī)則所有標記的向量rulefile File 當前打開的規(guī)則文件list_rules JList 規(guī)則列表list_detail JList 標記列表text_weight JTextField 權重顯示和輸入的文本域btn_weight JButton 設置權重的按鍵btn_append_onerule JButton 增加一條規(guī)則的按鍵btn_delete_onerule JButton 刪除一條規(guī)則的按鍵btn_openfile JButton 打開文件的按鍵btn_save JButton 保存到數(shù)據(jù)庫的按鍵btn_close JButton 退出當前對話框的按鍵btngrp_type ButtonGroup 單選框的分組btn_type_type JRadioButton 類型單選框btn_type_word JRadioButton 字符單選框text_value JTextField 標記內容的文本域text_times JTextField 標記出現(xiàn)頻率的文本域btn_insert JButton 在當前位置插入標記的案件btn_append JButton 在尾部追加標記的按鍵btn_delete JButton 刪除當前標記的按鍵btn_update JButton 更新當前標記的按鍵text_originword JTextField 分詞前的原語btn_parse JButton 分詞構造規(guī)則的按鈕此對話框響應兩類型的操作,一類是普通的響應,另一類是Jlist的選擇響應。當打開文件后,就向rules向量填充數(shù)據(jù),在list_rules中顯示出來。當選擇list_rules中的元素的時候,就會刷新一個表示權值的文本區(qū)域和details向量,將該rule的詳細信息表示出來。當選擇list_details時就要刷新單選按鈕和兩個文本區(qū)域,將當前標記的屬性顯示出來。另外設計了幾個按鈕用于修改標記和規(guī)則的。RulemanagerDialog事件響應表事件源 類型 說明btn_openfile ActionEvent 響應按鍵“打開規(guī)則文件”btn_weight ActionEvent 響應按鍵“修改權值”btn_append_onerule ActionEvent 響應按鍵“增加規(guī)則”btn_delete_onerule ActionEvent 響應按鍵“刪除規(guī)則”btn_update ActionEvent 響應按鍵“修改”btn_delete ActionEvent 響應按鍵“刪除”btn_insert ActionEvent 響應按鍵“插入”btn_append ActionEvent 響應按鍵“追加”btn_parse ActionEvent 響應按鍵“分詞構造規(guī)則”btn_save ActionEvent 響應按鍵“保存”list_rules ListSelectionEvent 響應列表選擇“規(guī)則列表”list_detail ListSelectionEvent 響應列表選擇“詳細信息列表”(4) ErrorDialog錯誤對話框和AboutDialog關于對話框ErrorDialog和AboutDialog屬于信息提示框,前者用于提示出錯信息而后者提示演示系統(tǒng)相關信息。3.2.2 線程的實現(xiàn)為了使得系統(tǒng)在運行中不會因為獲取網頁的耗費時間的工作使得系統(tǒng)處于半死狀態(tài),增加了線程支持。本系統(tǒng)具有三個線程類,Get_List用于獲取個人主頁,F(xiàn)ilter_List用于過濾NLP個人主頁,IE用于抽取網頁信息。所有線程類都實現(xiàn)了Runnable接口,接口包括一個返回void無參數(shù)的run函數(shù)。run函數(shù)實際上就是線程的主題部分。(1) Get_List類Get_List類含有一個MainFrame類型的屬性ctrl_frame,運行期間作為調用者MainFrame的引用,用以操作MainFrame的公有屬性。當線程運行的時候,整個過程是:設置菜單和按鍵“獲取個人主頁”為無效?設置菜單和按鍵“過濾個人主頁”無效?設置菜單和按鍵“獲取網頁信息”無效?調用私有函數(shù)search(以初始URL作為入口)?設置菜單和按鍵“過濾個人主頁”有效。search函數(shù)負責個人主頁的搜索,由李旻慶[5]同學完成。(2) Filter_List類Filter_List類同樣含有MainFrame類型的屬性ctrl_frame,其作用跟Get_List類里面的一樣。線程的運行過程是:設置菜單和按鍵“過濾個人主頁”為無效?執(zhí)行私有函數(shù)filter?設置菜單和按鍵“過濾個人主頁”為有效?設置菜單和按鍵“獲取網頁信息”為有效。其中私有函數(shù)filter是一個單次循環(huán)過程,即對當前的個人主頁列表進行一次過濾,結果是NLP個人主頁列表。其工作過程如下: (3) IE類IE類含有一個MessageDialog類型的屬性,運行期間作為調用者MessageDialog的引用,以使得IE可以控制MessageDialog的對象的公有屬性。IE的過程:指所有文本域為空?調用私有函數(shù)extract?刷新按鍵。extract函數(shù)用Extraction包里面的類構造對象實現(xiàn)信息的抽取。3.3 專家數(shù)據(jù)庫的介紹為了保存NLP專家數(shù)據(jù),計算語言學虛擬信息中心的設計采用了5張Table保存相關數(shù)據(jù),其中保存專家信息的表的結構如下所示:[1]表名:individual (專家);描述:從事計算語言學領域研究和開發(fā)工作的國內專家信息;表結構:字段名 數(shù)據(jù)類型 描述Name VARCHAR(20) 姓名Position VARCHAR(100) 職稱Homepage VARCHAR(100) 個人主頁Email VARCHAR(100) 電子郵箱Telephone VARCHAR(20) 電話Address VARCHAR(255) 聯(lián)系地址Affiliation VARCHAR(255) 所屬單位Subject VARCHAR(255) 所述學科Project VARCHAR(255) 參與項目Research VARCHAR(255) 研究方向主鍵碼 (Name,Affiliation)本系統(tǒng)得目的就是實現(xiàn)網上自動搜索、抽取出感興趣的信息填充該數(shù)據(jù)表。該數(shù)據(jù)表共有10項對應不同類型命名實體。為了實現(xiàn)自動抽取,必須對當前數(shù)據(jù)表有一個充分的理解。本數(shù)據(jù)庫采用MySQL實現(xiàn),就單個數(shù)據(jù)表并沒有什么問題,但是這個數(shù)據(jù)庫中并沒有用到外鍵碼,所以Research的多個抽取結果之間要用、(頓號)隔開,這是原有設計所決定的。本數(shù)據(jù)庫安裝在202.120.25.16:63306里面,在任何一臺機器都可以訪問。所以本系統(tǒng)可以運行在不同的機器上面。3.4 抽取前端的實現(xiàn)為了使得抽取客觀化、智能化,用中文單詞代替單個字符作為基本元素,單詞是通過ICTCLAS分詞系統(tǒng)獲得的。對分詞結果使用有限自動機的原理,按照給定的規(guī)則匹配,得到一系列的結果。再將這些結果加入特征并作相應的處理就得到了中間結果。這些操作都屬于抽取的前端,因為對所有的字段這些操作都是通用的。3.4.1 主頁的下載并對主頁文本的分詞(1) 下載一個頁面在Java中下載一個頁面非常簡單,只要對URL類的對象使用openStream函數(shù)就可以獲得該對象多對應的URL了。當下載了一個頁面文件之后,還要對文件進行處理,去除文件中的標記。HTML的標記通常具有如下格式:<Tag>Content</Tag>。只要將Content取出來就可以了。對文本的篩選用到了J2SDK1.4的新功能,就是Pattern和Matcher兩個類。用正則表達式(Regular Expression)提取尖括號里面的內容。任何一個標記之間的內容都作為一個字符串進行分詞,分次結果將作為獨立的鏈,將所有這些鏈在組成成一條鏈就成為了分詞的最終結果。(2) 對單鏈分詞ICTCLAS的源代碼是可以下載,但是下載下來的源代碼是VC開發(fā)的演示程序,要使用還得自行修改成dll文件[6]。要使用dll庫必須有一個獨立的類包含一些列本地靜態(tài)函數(shù)作為dll的入口。在本系統(tǒng)中,這個類就是ICTCLAS.ICTCLAS,類源程序如下:package ICTCLAS;public class ICTCLAS {static {System.loadLibrary("ICTCLAS");}public native static boolean ICTCLAS_Init();public native static boolean ICTCLAS_Exit();public native static String ICTCLAS_ParagraphProcess(String sParagraph);public native static String ICTCLAS_SentenceProcess(String sSentence, int nResultCount);}其中,System.loadLibrary是載入dll庫用的。第一個函數(shù)是構造函數(shù);第二個函數(shù)是析構函數(shù);第三個函數(shù)是對參數(shù)字符串分詞返回結果;第四個函數(shù)是返回多個分詞結果的函數(shù)。其中第三個函數(shù)使用最多。采用ICTCLAS分詞之后,得到的結果是一個以空格隔開的一系列的詞語以及他們的詞性的字符串。對該字符串采用正則表達式匹配后可以得到每一個詞語的內容和詞性。將這些分詞結果用一個類Word來封裝,然后組成兩級練表,就得到整個主業(yè)的分詞結構了。分詞結構如下所示: (3) 具體實現(xiàn)整個獲取網頁過程都放在Parser這個包里面了。其中Word類是用于表示單個分詞的數(shù)據(jù)結構,具有兩個String類型的域word和type。構造函數(shù)的參數(shù)是一個字符串,輸入分詞后的單一一個分詞結果將構造一個可以表示該分詞全部特性的實例。另外一個Parser類,所有函數(shù)都是靜態(tài)函數(shù),因為它們都只是一個過程,而不是存在于實際中的某種抽象。Parser共有7個靜態(tài)函數(shù)?!?public static void SaveToFile(String URL, String filename)此函數(shù)是為調試而設計的,功能是將URL得到的分詞結果保存到文件filename里面,分詞的獲得是調用Parse函數(shù)的?!?public static LinkedList GetFromFile(String filename)此函數(shù)也是為調試設計的,功能是將SaveToFile保存的結果重新讀取出來?!?public static LinkedList Parse(String URL)這是整個類的主體部分。整個過程是一個循環(huán),每一個循環(huán)是先獲得URL文檔,然后調用seperate將文檔分詞,最后將分詞結果整理成為上面所談到的數(shù)據(jù)結果。在分詞之前,需要調用filtrate過濾一些不必要的字符?!?private static LinkedList seperate(String unseperatedString)分詞函數(shù),調用ICTCLAS.ICTCLAS進行分詞,每次讀入一條鏈,返回分詞結果鏈表就是上圖中的二級鏈表● public static String getSubString(LinkedList parseResult, int start, int end)按照索引讀取分詞結果鏈表中的元素,將元素重新串起來成為字符串返回。其中parseResult是分詞結果鏈表,start是開始索引,end是結束索引。● public static String getTagString(LinkedList parseResult, int indexIn)此函數(shù)的作用是,返回分詞結果鏈表中的含有indexIn索引的二級鏈表所代表的字符串?!?private static String filtrate(String input)過濾函數(shù),將無用的符號都過濾掉。其中保留了字母、數(shù)字、中文字符以及一下特殊字符:@、.、:、;、:、-、_、,、,、。、<、>、《、》、(、)、[、]、【、】、&、、、;、?、?、%、!、!、#。3.4.2 匹配分詞結果(1) 規(guī)則規(guī)則是根據(jù)有限自動機的原理和中國科學院計算技術研究所詞法分析系統(tǒng)ICTCLAS[7]的分詞結果制定的。中文詞語切分系統(tǒng)的輸入是一個句子,輸出是這個句子的分詞,并且包含每個分詞的詞性。也就是說結果是一個有續(xù)集合,集合的元素是單詞,每個單詞包含單詞的內容以及單詞的詞性。比如說,上海交通大學,分次結果是:上海/ns 交通/n 大學/n,其中ns指地名、n指普通名詞,更多的詞類簡寫請參看附錄。如何從這些分詞結果中抽取出需要的信息呢?比如上海交通大學整個詞而不是孤立的一個詞。由此,使用規(guī)則的方法應運而生,規(guī)則的想法是從分詞結果萌發(fā)的。首先是表達一個孤立的詞,可以有兩種表達方法,其一就是精確匹配,比如精確匹配“上海”這個詞;其二就是類型匹配,比如匹配ns的話,也可以匹配到“上海”,同時還有“北京”、“倫敦”等等。“W:上海”表示精確匹配“上海”,而“T:ns”表示類型匹配地名,可以是“上海”、“北京”等。為了方便計算,在每一個標記后面加了一個出現(xiàn)次數(shù)的標記,其中大于等于1的表示準確的匹配n個同內容或者同類型的分詞。例如:W:上海@1表示準確匹配一個“上海”,T:n@5表示準確匹配5個名詞。如果次數(shù)的標識是*號,表示匹配任意個(包括0個)。例如:T:n@*表示匹配任意個名詞,諸如“交通大學”、“古董磁帶錄音機”或者空串等等。但是如果次數(shù)標記是+的話,就表示1或者多次。如T:n@+只能表示“交通大學”和“古董磁帶錄音機”而不能表示空串。具體如下表:標記 意義 例子n(n>=1) 精確匹配指定個數(shù) T:ns@1匹配一個地名* 匹配任意個 T:n@* 匹配任意個名詞,包括0個即空串+ 匹配一或者多個 T:n@+ 匹配至少一個名詞,可以多個將上述的每一個分詞的規(guī)則表示用“/”隔開串成一起即表示按順序匹配一個短語。比如T:ns@1/T:n@1/W:大學@1,首先是匹配一個地名,然后是匹配一個名詞,最后精確匹配“大學”這個詞。上海交通大學就可以用這個規(guī)則匹配出來,上海—地名、交通—名詞、大學—精確匹配;西安交通大學、臺灣交通大學、哈爾濱工業(yè)大學等等也可以用這一條規(guī)則匹配。當有了上文的規(guī)則的時候,已經可以抽取出來需要的短語了,但是不能通過一條規(guī)則將所有需要的同一類型短語抽取出來,而每條規(guī)則抽取的結果哪個更加有用難以分辨,所以加入了權重這個屬性。每一條規(guī)則都有其自身的權重,匹配規(guī)則的短語具有規(guī)則所指定的權重,而匹配后的多個結果經過一系列的計算就可以抽取出權重最高的結果。這樣的做法可以通過修改權重來達到更高正確率。權重是在上文的規(guī)則前面加入H:權重數(shù)字# 的前綴,比如H:1001# T:ns@1/T:n@1/W:大學@1使得該條規(guī)則的權重為1001。權值為0具有特殊意義,下文中將會提到??傮w來說,一條規(guī)則的產生式可以如下表示:RULE ? HEIGHT # LINKHEIGHT ? H: numberLINK ? TAG TAGS*TAGS ? / TAGTAG ? TYPE: contentTYPE ? WTYPE ? T其中開始符是RULE,number指數(shù)字,content指可打印字符。(2) 算法雖然匹配過程用到了有限自動機的技術,但是匹配算法并不是有限自動機,而是比有限自動機簡單的多得模型。整個算法都放在Matcher包里面了。Matcher包所含的類如下:類名 說明MatchWord 標記匹配的基類 TMatch 詞性匹配類,繼承MatchWord WMatch 內容匹配類,繼承MatchWord MatchedWord 匹配后的結果的數(shù)據(jù)結構表示 Matcher 單個規(guī)則的匹配器Rule 規(guī)則表達 LinkMatcher 整個鏈表的匹配器● MatchWord的子類TMatch和WMatch的匹配算法以規(guī)則的一個基本標記作為構造函數(shù)的入口,按照規(guī)則說明構造一個標記匹配器。這兩個類的一個很重要的函數(shù)就是public String getMatched(ListIterator list)該函數(shù)的功能就是對當前的ListIterator的當前位置開始匹配,如果匹配規(guī)則,則返回匹配字符串,否則返回空。整個函數(shù)的工作流程大致為:先判斷標記頻率,分成三種情況。1、*任何個數(shù),那么采用一個while{}循環(huán)實現(xiàn),這種情況是永遠都有返回值得;2、+至少一個,那么采用do{}while實現(xiàn),這種情況下只要匹配第一個就算成功,不管后面有多少個,所以當且僅當?shù)谝淮纹ヅ涫〔欧祷乜?,其他情況都有相應的返回值;3、固定個數(shù),該情況用了一個for循環(huán)實現(xiàn),只要當中某一個匹配失敗,就要向前退回幾個標記,并且返回空,當且僅當整個循環(huán)都匹配成功才返回正確值?!?Matcher類,單規(guī)則匹配器Matcher的構造函數(shù)包含一個String類型的參數(shù)input,實際上就是一條規(guī)則的表達。整個構造函數(shù)就是構造一個以MatchWord的子類的實例為元素的鏈表。此構造函數(shù)首先分解input為多個標記,然后按照標記的順序構造鏈表。對每一個標記,先判斷是“T”開頭還是“W”開頭,前者就用TMatch構造MatchWord實例,后者就用WMatch。Matcher的唯一一個方法就是getMatch,具有ListIterator類型的參數(shù)list。getMatch按照構造的時候得規(guī)則從list的當前位置開始匹配,如果匹配成功返回匹配結果,如果匹配失敗,返回空。整個工作過程都依賴著MatchWord的兩個子類TMatch和WMatch。首先是讀取規(guī)則鏈表,看看當前的標記是“TMatch”類的實例還是“WMatch”類的實例,分別強行類型轉化,然后對list調用當前標記的getMatched方法獲取結果。如果整個過程都匹配成功的話,將每一次的匹配結果串起來返回;但是如果中間某一次的匹配失敗的話,直接返回空。Matcher的getMatch的正常返回結果是構造其對象的規(guī)則對當前l(fā)ist的當前位置的匹配結果?!?LinkMatcher類(Rule類和MatchedWord類)LinkMatcher依靠著Rule和MatcherWord。實際上Rule是Matcher的抽象,每一個Rule的實例都有自己的Matcher實例和一個整形變量weight(權重)。Rule的實例化過程就是將一條規(guī)則取出頭部H:number的number作為weight,剩下的尾部用作構造matcher。將Matcher抽象出來成為Rule線的更加科學,直觀(可以將weight置于Matcher的一個屬性)。另外,MatchedWord是表示單個抽取結果的數(shù)據(jù)結果的類。MatchedWord具有3個域:index(int)當前匹配字的索引,即當前匹配字在文本中的位置(注意,這里并不是絕對位置,而是按照整個分詞安排的位置);word(String)當前匹配字的內容,是匹配成功的結果;weight(int)當前匹配字所滿足的規(guī)則的權重,任何匹配成功的匹配字都賦予其所滿足的的規(guī)則的權重值。LinkMatcher的構造實際上就是構造一個鏈表,鏈表的元素是Rule的實例,整個LinkMatcher都依靠這個鏈表工作。最開始的設計是保存一個沒有解析的規(guī)則的鏈表的,每次匹配在重新解析規(guī)則,這樣做的話時間上耗費太多了,取而代之的是用空間換取時間,保存解析后的規(guī)則。LinkMatcher的工作過程完全封裝在getMatch函數(shù)里面,函數(shù)的參數(shù)是一個LinkedList類型的parseResult,即第1節(jié)所述的下載并且分詞的結果。getMatch的工作過程如下: (3) 結果匹配的結果是一個以MatchedWord實例為元素的鏈表,每一個接點元素(MatchedWord的實例)都有三個基本屬性:索引、內容以及權值。匹配的結果比較混亂,也有不少重復,而且,根據(jù)規(guī)則出來的結果很多都具有包含關系。這樣的話,匹配的結果一定需要經過整理才能用于最后的抽取。3.4.3 整理匹配結果匹配結果的整理是一個合并過程,合并有兩種,一是非包含性合并,而是包含性合并。非包含性合并就是兩個必配結果一個包含另一個的內容,但是兩個內容有天淵之別,不能合并,比如:教授和副教授;包含性合并就是內容間可以相互合并,因為較長的結果更具有準確性,比如:上海交通大學和上海交通大學計算機系。兩種合并方法并沒有分開實現(xiàn),而是放在同一個函數(shù)里面實現(xiàn)了。整理后的結果也不同于整理前的,主要是每一個匹配字都已經不只是一個索引,而是一系列索引(包含所有合并字的索引的集合)。整理過程分三步走,歸并、二次歸并以及索引歸并,下文將講述這三步如何實現(xiàn)。在這之前先講述一下所用到的數(shù)據(jù)結構。整個合并器都放在Merger的包里面。(1) 類Entity – 匹配結果的數(shù)據(jù)結構Entity類具有三個域:LinkedList類型的indexs索引列表,int類型的weight權值,String類型的word內容。其中需要說明的是indexs的元素是Integer的實例,并不是int,使用Integer是因為LinkedList里面的元素都必須是Object,不能是基本數(shù)據(jù)類型。Entity具有兩個函數(shù),一是構造函數(shù),二是刷新函數(shù),兩個函數(shù)的參數(shù)都是MatchedWord的實例,刷新函數(shù)還具有布爾型參數(shù)exact用于控制選用的合并方法。構造函數(shù)從一個MatchedWord的實例初始化一個Entity實例,該實例的索引列表只含有原來的MatchedWord實例的索引,權重內容也是一樣的。refresh函數(shù)根據(jù)參數(shù)matched和exact修改自身的屬性。根據(jù)exact的真假,對內容進行判定,如果為真就判斷自身的內容和matched的內容是否絕對相等,否則就判斷兩者是否有包含關系。如果exact為真且內容絕對相等就將其權值直接相加,而且將新的索引追加到indexs的尾部。如果exact為假且內容含有包含關系的話,設定自身的word為包含者,同時追加索引,權值設置為內容較長的matched的權值加上內容較短的matched的權值乘以短長度跟長長度的比例。refresh函數(shù)如果合并成功返回真,否則不能合并的話就返回假。(2) 函數(shù)Merge – 匹配過程Merge含有兩個參數(shù):LinkedList類型的matcherResult和boolean類型的exact?!?歸并第一次的歸并實際上就是對matcherResult(LinkMatcher的匹配結果)進行簡單的壓縮。整個過程就是對新建立的鏈表跟matcherResult進行完全的對比,新的鏈表是以Entity的實例為元素的。遍歷matcherResult整個鏈表,對matcherResult的每一個MatchedWord實例對新的鏈表進行全表刷新,如果沒有一個Entity實例刷新成功的話,將此MatchedWord實例構造Entity實例并加入到新的鏈表?!?二次歸并由于第一次歸并過程極其簡單,對非精確歸并存在遺漏問題,所以就需要二次歸并了。精確歸并不存在非精確歸并所具有的問題,所以不需要經過二次歸并。歸并的問題:由于歸并是順序話的,所以錯位歸并的字符串就會被分成兩個Entity實例,比如:上海交通大學和交通大學計算機系,同時還會產生上海交通大學計算機系。很明顯,前兩者都必須歸并到第三者那里的。關于問題的產生,用上面的例子說明一下:首先匹配到的是上海交通大學,然后由匹配到交通大學計算機系,按照歸并算法后者不能歸并到前者,因此產生了兩個Entity實例,緊接著又匹配到了上海交通大學計算機系,按照歸并算法被歸并到第一個Entity實例。這樣第二個Entity實例的確不應該存在,而且需要歸并到第一個。精確匹配的話是不存在這種情況的。二次歸并實際上就是對歸并的結果鏈表重新構造一次,將多余的Entity實例合并,算法跟歸并類似。權值的計算稍有不同,二次歸并的權重的重分配是將高權值跟低權值的差值附加到高權值中。● 索引歸并到這里,歸并的內容已經沒有重復,而且權值也得到合理分配,但是索引還沒有整理過。在以上部分,有可能某些Entity實例的索引列表有重復,所以必須對每一個Entity實例的索引列表進行過濾,刪除重復的所索引。索引歸并的算法實際上就是雙重循環(huán),第一重是對整個結果鏈表遍歷,第二重是對每一個Entity實例的索引鏈表遍歷,將多余的索引刪除。對索引的重復性的判斷不能單單看是否相等,應該要看兩個值得差值是否小于內容的長度,如果小于內容的長度,那么這兩個索引還是重復的,應該保留較小值,刪除較大值。索引歸并后就得到了最后的結果。這個結果將用于最后的抽取的數(shù)據(jù)源。3.5 各個字段的抽取方法3.5.1 共通性特征具體的抽取都放在不同的類里面,這些類具有相同的基類EntitySet(EMailSet除外),所有的類都放在Extraction包里面。以下是Extraction包的類列表:NameSet、PositionSet、EMailSet、TelephoneSet、AddressSet、UnitSet、SubjectSet、ItemSet、TechnologySet。這樣設計是因為他們都有共通性的特征。所有繼承EntitySet的類的構造函數(shù)都調用EntitySet的構造函數(shù),而且使用了不同的規(guī)則文件。這樣使得整個系統(tǒng)顯得更加體系化。規(guī)則文件的路徑在RUN_TIME.RUN_TIME里面作為靜態(tài)屬性設定。EntitySet的構造函數(shù)如下:public EntitySet(LinkedList parseResult, String rule_file_name, boolean exact)第一個參數(shù)是Parser的Parse結果,第二個是規(guī)則文件的名稱,第三個是合并器的合并方法設定。在EntitySet中需要保留parseResult作為以后使用,規(guī)則文件是用來構造LinkMatcher的實例matcher的,有了matcher和exact就可以對parseResult進行操作了。將parseResult作為matcher的getMatch參數(shù),可以得到一個matcherResult;再將matcherResult和exact作為Merger的函數(shù)Merge的參數(shù),得到了中間結果entitylist。entitylist是EntitySet的一個域,EntitySet還有一個parseResult的引用parserResult以及一個特征鏈表characteristicIndex。characteristicIndex是通過篩選entitylist的0權值項獲得的。在規(guī)則中,設置權值為0的項屬于特征詞,比如“姓名”就是一個特征詞。特征詞不是最后抽取所需要的,但是特征詞可以在抽取過程中起到重要作用!特征詞鏈表characteristicIndex通過過濾entitylist,將權值為0的項移動到自身獲得。整個構造函數(shù)就是初始化了這幾個鏈表:parserResult、entitylist、characteristicIndex。每一個命名實體在頁面中都具有索引、權重,而且還有共通的特征,可以歸納如下:該類型第一個出現(xiàn)的實體;權值最高的實體;距離特征詞最近的實體。雖然不同類型的命名實體具有不同的特征,有不同的抽取方法,但是以上提到的三種特征對每一種實體都具有一定的意義,所以在基類中予以實現(xiàn)。三種特征的抽取分別是三個函數(shù),返回值類型都是Merger.Entity?!?protected Entity getFirstEntity() 獲得第一個出現(xiàn)的實體首先設置index到一個足夠大的值,在本系統(tǒng)中設置為65535。然后遍歷entitylist,對entitylist里面的每一個元素的indexs進行遍歷,當遇到比index小的元素就代替index,并設置結果實體result為entitylist的當前元素。直到遍歷結束,返回result字符串?!?protected Entity getWeightestEntity() 獲得權值最高的實體首先設置weight為零。然后遍歷entitylist,對entitylist里面的每一個元素的weight,如果比weight大,就替換之,并且設置結果實體result為entitylist的當前元素。直到遍歷結束,返回result?!?protected Entity getNearestEntity() 獲得最接近特征詞的實體該過程是一個三重循環(huán),第一重是對entitylist遍歷,第二重是對當前的entitylist元素的indexs遍歷,第三重是對characteristicIndex的遍歷,比較characteristicIndex的元素的索引跟indexs的元素值,找出最小的差距,返回差距最小的實體。3.5.2 姓名的抽取抽取姓名所用到的規(guī)則保存在name.extr.rule里面,并且歸并方式為非精確歸并。姓名的抽取算法如下:① 找出最接近特征詞的實體nearest和權值最高的實體weightest;② 如果nearest跟weightest內容一樣,返回實體的內容;③ 找出第一個實體first以及其所以firstIndex;④ 如果firstIndex<2,即出現(xiàn)在HTML頭部,返回first的內容;⑤ 如果nearest跟first內容一樣,就返回他們的內容;⑥ 最后,如果weightest的權值高于200則返回weightest的內容;⑦ 返回空。3.5.3 職稱的抽取抽取職稱所用到的規(guī)則保存在pos.extr.rule里面,歸并方式為精確歸并。抽取算法如下:① 找出最接近特征詞的實體nearest,如果存在則返回;② 找出權值最高的實體weightest,如果存在則返回;③ 返回空。對職稱并沒有姓名那樣過多的要求,因為職稱相對姓名來說非常簡單,數(shù)量非常少,而且不像姓名那樣千奇百怪。因此就簡單得抽取,當然最佳抽取結果還是找到“職稱”、“職務”等字段,再查找最接近的匹配字。找不到的再找一個出現(xiàn)概率最高的取代理論正確性也很高。3.5.4 電子郵件的抽取電子郵件的抽取是不需要通過以上提到的匹配之類的,只需要下載到的源文本。所以電子郵件抽取對應的類EMailSet不是從EntitySet繼承過來的。對源文本匹配所有的電子郵件格式的字符串,將所有的符合的字符串用、(頓號)分開串成一個新的字符串返回。電子郵件的抽取相對是很簡單的,因為電子郵件的格式是恒定的,所用的字符集小。抽取電子郵件用到了正則表達式:[a-zA-Z_0-9\-]+@([a-zA-Z_0-9\-]+\.)+[a-zA-Z]+。3.5.5 電話的抽取抽取電話所用到的規(guī)則保存在tel.extr.rule里面,歸并的方式為非精確歸并。抽取算法如下:① 找出最接近特征詞的實體nearest;② 如果nearest符合電話格式就返回nearest的內容;③ 找出內容最長的實體longest;④ 如果longest符合電話格式就返回longest的內容;⑤ 找出權值最高的實體weightest;⑥ 如果weightest符合電話格式就返回weightest的內容;⑦ 返回空。電話格式通常都是3到4位數(shù)字,然后一個“-”,然后6位或以上數(shù)字;也有只有后者即6位以上數(shù)字的。如果不出現(xiàn)正常情況的話,通常一個頁面具有電話號就是該頁面的最長數(shù)字串。3.5.6 聯(lián)系地址的抽取抽取地址所用到的規(guī)則保存在addr.extr.rule里面,歸并方式為非精確歸并。抽取算法如下:① 找出特征詞的索引,如果不存在特征詞則返回空;② 取出特征詞的索引的下一位所在的鏈(見Parser.getTagSting);③ 如果該鏈含有“地址”子串,將其去除;④ 返回鏈字符串。對地址的抽取僅能用這種方法,因為地址的電話非常大。地址的前部都是省份城市變化相對小,但是后部變化就太大了。加上,如果一個頁面里面沒有特征詞的話,一般是沒有地址的。3.5.7 工作單位的抽取抽取工作單位的規(guī)則保存在unit.extr.rule里面,歸并方式為非精確歸并。抽取算法如下:① 分別找出三個特征性的實體nearest、weightest、first;② 如果nearest的內容跟weightest的內容一樣,返回該內容;③ 如果nearest的內容跟first的內容一樣,返回該內容;④ 如果nearest的權值大于200,返回nearest的內容;⑤ 如果first的內容跟weightest的內容一樣,返回該內容;⑥ 如果first的權值大于400,返回first的內容;⑦ 如果weightest的權值大于400,返回weightest的內容;⑧ 取出特征詞的索引,如果沒有返回空;⑨ 取出特征詞的索引的下一位所在的鏈(見Parser.getTagSting);⑩ 如果該鏈含有“單位”子串,將其去除;? 返回鏈字符串。3.5.8 所屬學科的抽取抽取工作單位的規(guī)則保存在subj.extr.rule里面,歸并方式為非精確歸并。抽取算法如下:① 分別找出三個特征性的實體nearest、weightest、first;② 如果nearest的內容跟weightest的內容一樣,返回該內容;③ 如果nearest的內容跟first的內容一樣,返回該內容;④ 如果nearest的權值大于200,返回nearest的內容;⑤ 如果first的內容跟weightest的內容一樣,返回該內容;⑥ 如果first的權值大于400,返回first的內容;⑦ 如果weightest的權值大于400,返回weightest的內容;⑧ 取出特征詞的索引,如果沒有返回空;⑨ 取出特征詞的索引的下一位所在的鏈(見Parser.getTagSting);⑩ 如果該鏈含有“學科”子串,將其去除;? 返回鏈字符串。3.5.9 參與項目的抽?、?找出特征詞的索引,如果不存在特征詞則返回空;② 取出特征詞的索引的下一位所在的鏈(見Parser.getTagSting);③ 如果該鏈含有“項目”子串,將其去除;④ 返回鏈字符串。3.5.10 研究方向的抽取由于研究方向的規(guī)則定義的絕對性,只要是匹配到的實體都可以確定為目標,所以將所有匹配結果用、(頓號)隔開串成字符串返回。4. 運行結果及分析4.1 系統(tǒng)運行的結果4.1.1 穩(wěn)定性測試本系統(tǒng)使用了線程,線程間的通訊沒有專門設計,因此可能存在穩(wěn)定性問題;另外因為使用了外部的dll程序,dll程序的不穩(wěn)定性也是存在的。(1) 線程穩(wěn)定性經過初步的測試,沒有發(fā)現(xiàn)線程同步問題。在Get_List工作的時候開啟Filter_List,后者對Get_List的結果讀取并沒有問題。IE的運作相對獨立,不會受其他線程的影響。經過分析,其穩(wěn)定性是建立在java對線程的穩(wěn)定性的基礎上的。因為Vector類具有線程同步,所以數(shù)據(jù)并沒有出現(xiàn)錯誤或者錯位。兩個線程只共享了Vector的實例,并沒有其他數(shù)據(jù),因此系統(tǒng)是穩(wěn)定的。(2) ICTCLAS穩(wěn)定性本系統(tǒng)使用了ICTCLAS,在多次運行中,出現(xiàn)過ICTCLAS出錯的問題,而且全部都是dll運行時的內存問題。在官方網站中并沒有ICTCLAS的dll庫下載,只能下載到具有可視化界面的源程序。因此自能修改成java可以調用的dll庫。修改dll的經驗的不足帶來了一系列的問題,主要是穩(wěn)定性問題(在正確性上面做到跟ICTCLAS演示程序一樣)。ICTCLAS的不穩(wěn)定使得本系統(tǒng)具有不穩(wěn)定性,只要ICTCLAS出錯整個系統(tǒng)就無法運行了。4.1.2 正確性測試正確性測試分成兩種:一是對含有數(shù)據(jù)的網頁的抽取的正確性;二是對不含有數(shù)據(jù)的網頁的抽取的錯誤判斷。各個字段的抽取的正確性是不同的。以下是對14個已知NLP個人主頁(從凌江處獲得的結果)的抽取的正確性測試結果表:字段 正確數(shù)據(jù)的爭取抽取 錯誤數(shù)據(jù)的錯誤抽取姓名 10 0職稱 13 0個人主頁 14 0電子郵箱 14 0電話 3 0聯(lián)系地址 0 0所屬單位 12 2所屬學科 12 1參與項目 0 0研究方向 10 0總 結 62.9% 2.1%從結果中可以看出,為了提高準確性,避免抽取出錯誤的信息,使得一部分正確信息不能被正確抽取出來。4.2 有關問題總結和系統(tǒng)的改進建議4.2.1 分詞系統(tǒng)的更換現(xiàn)在國內已經有不少詞語切分的成品,甚至作為商品出售。當初選擇ICTCLAS是因為它是免費而且開放源代碼,可以根據(jù)源代碼修改成為一個更穩(wěn)定的系統(tǒng)。但是中科院的詞語切分系統(tǒng)在正確性上面不如北大的。在系統(tǒng)開發(fā)的前期,dll庫還沒有修改完成,當時使用ICTCLAS是使用其官方網站上面的演示頁面。不停的調用遠程的頁面分詞的話,一個很嚴重的問題就是時間耗費太大。但是使用本地程序就不可能使用遠程程序一樣有著不同的更新版本,正確性不可能不斷的提高。分詞系統(tǒng)的正確性直接影響著姓名的抽取,當規(guī)則中沒有一個姓名的絕對匹配的話,姓名的抽取完全靠分詞系統(tǒng)了。因此,對分詞系統(tǒng)的更換提出如下建議:更換一個正確性更高的本地詞語切分系統(tǒng),比如山西大學的詞語切分系統(tǒng)就是一個不錯的選擇。山西大學的詞語切分系統(tǒng)是購買了ICTCLAS并且對其進行了優(yōu)化,即將有對應的java版本的成品,是一個不錯的選擇。另一個正確性很高的詞語切分系統(tǒng)是北京大學的,但是沒有提供本地程序,只能遠程頁面調用,時間耗費太大。如果北京大學提供相應的本地化程序供使用的確是一個更好的選擇。4.2.2 索引的絕對化本系統(tǒng)中索引并不是絕對的,而是按照分詞結果進行重分配的,在后期某些地方可能會帶來一定的問題。而且這樣定義索引不夠客觀,會隨著詞語切分系統(tǒng)的更新而變化。因此,建議索引采用絕對索引,即以整個匹配結果的第一個字在文本中的絕對位置作為索引值。4.2.3 權值的重分配在以上測試中已經看到規(guī)則中權值的不合理給抽取結果帶來了很多錯誤,主要是不應該抽取的數(shù)據(jù)會被錯誤的抽取出來。權值在本系統(tǒng)中采用了整型值,而不是介于0-1的浮點數(shù)。將當前的權值重新設計安排在0-1之間的浮點數(shù)就顯得比較客觀。但是如何取值仍然需要大量的實驗去證明。因此,除了建議權值歸1化之外,還建議通過大量實驗對權值重新分配。4.2.4 抽取算法的優(yōu)化除了姓名、職稱、個人主頁、電子郵件、電話和研究方向以外的其他字段(聯(lián)系地址、工作單位、所屬學科、參與項目)的抽取,都存在著正確性問題,究其原因是因為這些字段變化太大(特別是參與項目),界限難以抓取。系統(tǒng)采用兩級鏈表的設計是為了解決此類問題的。通常一個實體在頁面內都匯報存在一個單一的標記內部,并不會夸兩個標記保存。因此,建議采用一種特征性的抽取方法(該方法在早期中曾經設計過,但由于時間原因并沒有實現(xiàn))。在規(guī)則中加入一些象征性的詞語,比如項目中可以加入“963計劃”等象征性詞語。對最后產生的entitylist,找出這些象征性的詞語所在的鏈(即單獨一個標記的內部)。對鏈進行邊界確定后返回。這種方法對疑難字段的抽取應該說是相當有用的。5. 參考文獻[1] 朱曉明《計算語言學虛擬信息中心網站的設計與實現(xiàn)》2003[2] 駱衛(wèi)華《信息提取(IE)概述》2002[3] 李保利,陳玉忠,俞士汶《信息抽取研究綜述》2003[4] Hobbs J, The Generic Information Extraction System. In Proceedings of the Fifth Message Understanding Conference (MUC-5), pages 87-91. Morgan Kaufman, 1993[5] 李旻慶[6] 王晨[7] ICTCLAS[8] 俞士汶《計算語言學簡介》6. 致謝最后,我要深深感謝我的導師和身邊的同學,在我畢業(yè)設計和撰寫論文的過程中,他們給了我無微不至的關懷和愛護,在我向前邁出的每一小步中都有他們的辛勤和汗水,“不積小步,無以成千里”,正是在這種愛的關愛下,在李芳老師和諸位同學默默關注的目光和永遠鑒定的支持下,我得以順利的完成此篇本科生畢業(yè)論文。他們始終都是我的堅強后盾,是他們的支持和鼓勵使我不畏艱辛,勇往直前。“誰言寸草心,報得三春暉”,我也要將這篇論文獻給他們,感謝他們無私的愛。他們是我的信心來源,他們的支持和鼓勵使我不畏艱辛,勇往直前。所以,我要將這篇論文獻給他們,感謝他們?yōu)槲易龅囊磺?,感謝他們無私的愛。7. 附錄7.1 ICTCLAS詞性標記集規(guī)范代碼 名稱 幫助記憶的詮釋Ag 形語素 形容詞性語素。形容詞代碼為a,語素代碼g前面置以A。 a 形容詞 取英語形容詞adjective的第1個字母。 ad 副形詞 直接作狀語的形容詞。 an 名形詞 具有名詞功能的形容詞。 b 區(qū)別詞 取漢字“別”的聲母。 c 連詞 取英語連詞conjunction的第1個字母。 Dg 副語素 副詞性語素。副詞代碼為d,語素代碼g前面置以D。 d 副詞 取adverb的第2個字母,因其第1個字母已用于形容詞。 e 嘆詞 取英語嘆詞exclamation的第1個字母。 f 方位詞 取漢字“方” g 語素 取漢字“根”的聲母。 h 前接成分 取英語head的第1個字母。 i 成語 取英語成語idiom的第1個字母。 j 簡稱略語 取漢字“簡”的聲母。 k 后接成分 l 習用語 習用語尚未成為成語,取“臨”的聲母。 m 數(shù)詞 取英語numeral的第3個字母,n,u已有他用。 Ng 名語素 名詞性語素。名詞代碼為n,語素代碼g前面置以N。 n 名詞 取英語名詞noun的第1個字母。 nr 人名 名詞代碼n和“人(ren)”的聲母并在一起。 ns 地名 名詞代碼n和處所詞代碼s并在一起。 nt 機構團體 “團”的聲母為t,名詞代碼n和t并在一起。 nz 其他專名 名詞代碼n和z并在一起。 o 擬聲詞 取英語擬聲詞onomatopoeia的第1個字母。 p 介詞 取英語介詞prepositional的第1個字母。 q 量詞 取英語quantity的第1個字母。 r 代詞 取英語代詞pronoun的第2個字母,因p已用于介詞。 s 處所詞 取英語space的第1個字母。 Tg 時語素 時間詞性語素。在語素的代碼g前面置以T。 t 時間詞 取英語time的第1個字母。 u 助詞 取英語助詞auxiliary Vg 動語素 動詞性語素。動詞代碼為v。在語素的代碼g前面置以V。 v 動詞 取英語動詞verb的第一個字母。 vd 副動詞 直接作狀語的動詞。動詞和副詞的代碼并在一起。 vn 名動詞 指具有名詞功能的動詞。動詞和名詞的代碼并在一起。 w 標點符號 x 非語素字 字母x通常用于代表未知數(shù)、符號。 y 語氣詞 取漢字“語”的聲母。 z 狀態(tài)詞 取漢字“狀”的聲母的前一個字母。 7.2 系統(tǒng)使用幫助※ 修改:·Dillon 於 06月08日16:59:43 修改本文·[FROM: 211.80.51.111]※ 來源:·飲水思源 bbs.sjtu.edu.cn·[FROM: 211.80.51.111]
本主題共有 1 篇文章.
[回文章] [返回上一頁][本討論區(qū)]
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PHP中文分詞的簡單實現(xiàn)代碼分享
space: 搜索引擎學習資源收集
14款中文分詞開源軟件【整理】
網絡蜘蛛,搜索引擎/網絡蜘蛛程序代碼 瘋狂代碼!
搜索引擎系統(tǒng)學習與開發(fā)實踐總結
推薦一下,ictclas4j很好的java分詞系統(tǒng)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服