小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

自然語言處理專家個(gè)人主頁信息自動(dòng)抽取

 weicat 2006-02-13
飲水思源 - 主題文章閱讀  [討論區(qū): Cantonese]
[回復(fù)本文] 發(fā)信人: Dillon(狄龍), 信區(qū): Cantonese
標(biāo)  題: 自然語言處理專家個(gè)人主頁信息自動(dòng)抽取
發(fā)信站: 飲水思源 (2004年06月08日15:25:44 星期二), 站內(nèi)信件











自然語言處理專家個(gè)人主頁信息自動(dòng)抽取















班  級:F0003301
學(xué)生姓名:梁永堅(jiān)
指導(dǎo)教師:李芳

 
[題目]
摘要
[摘要正文摘要正文摘要正文摘要正文摘要正文摘要正文。]

關(guān)鍵詞:[關(guān)鍵詞1],[關(guān)鍵詞2]
 
[TITLE]
ABSTRACT

[Body of abstract.]

KEY WORDS:[Key Word 1], [Key Word 2]
 
目錄
1. 概述 1
1.1 計(jì)算語言學(xué)介紹  1
1.2 應(yīng)用背景    2
1.3 上海交通大學(xué)計(jì)算語言學(xué)虛擬信息中心簡介  2
1.4 各章節(jié)介紹  2
2. 信息抽取系統(tǒng)的設(shè)計(jì)   3
2.1 信息抽取技術(shù)簡介    3
2.1.1 信息抽取的定義    3
2.1.2 信息抽取的產(chǎn)生    3
2.1.3 信息抽取的工作流程    3
2.1.4 信息抽取的關(guān)鍵技術(shù)    4
2.2 “個(gè)人主頁”信息抽取系統(tǒng)的設(shè)計(jì)  4
2.2.1 個(gè)人主頁的自動(dòng)搜索    4
2.2.2 自然語言專家的判別    5
2.2.3 專家信息的自動(dòng)抽取    5
2.3 演示系統(tǒng)的界面  5
3. 專家信息自動(dòng)抽取的實(shí)現(xiàn)   7
3.1 開發(fā)環(huán)境以及開發(fā)工具的介紹  7
3.1.1 Java2 SDK 1.4.2 Standard Edition  7
3.1.2 IntelliJ IDEA (With MySQL connector)  7
3.1.3 ICTCLAS 計(jì)算所分詞系統(tǒng)    8
3.2 系統(tǒng)界面的實(shí)現(xiàn)  8
3.2.1 界面部分的實(shí)現(xiàn)    8
3.2.2 線程的實(shí)現(xiàn)    12
3.3 專家數(shù)據(jù)庫的介紹    13
3.4 抽取前端的實(shí)現(xiàn)  14
3.4.1 主頁的下載并對主頁文本的分詞  14
3.4.2 匹配分詞結(jié)果  16
3.4.3 整理匹配結(jié)果  20
3.5 各個(gè)字段的抽取方法  21
3.5.1 共通性特征    21
3.5.2 姓名的抽取    22
3.5.3 職稱的抽取    22
3.5.4 電子郵件的抽取    23
3.5.5 電話的抽取    23
3.5.6 聯(lián)系地址的抽取    23
3.5.7 工作單位的抽取    24
3.5.8 所屬學(xué)科的抽取    24
3.5.9 參與項(xiàng)目的抽取    25
3.5.10 研究方向的抽取   25
4. 運(yùn)行結(jié)果及分析   25
4.1 系統(tǒng)運(yùn)行的結(jié)果  25
4.1.1 穩(wěn)定性測試    25
4.1.2 正確性測試    26
4.2 有關(guān)問題總結(jié)和系統(tǒng)的改進(jìn)建議    26
4.2.1 分詞系統(tǒng)的更換    26
4.2.2 索引的絕對化  26
4.2.3 權(quán)值的重分配  27
4.2.4 抽取算法的優(yōu)化    27
5. 參考文獻(xiàn) 27
6. 致謝 27
7. 附錄 28
7.1 ICTCLAS詞性標(biāo)記集規(guī)范   28
7.2 系統(tǒng)使用幫助    29

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

本主題共有 1 篇文章.
[回文章] [返回上一頁][本討論區(qū)]

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多