當文章碎裂到句子程度後,使用wordnet和opennlp,取出需要兩種資料,一種是關係組合,一種是使用動詞/名詞使用排行.例如原始句子是 Flextronics buys Solectron for $ 3.6 billion in cash and stock buys Solectron for $ 3.6 billion in cash and stock Jun 4 , 2007 at 8:56 AM PDT Jun 4 , 2007 at 8:56 AM PDT MILPITAS , Calif 會切分出 (Flextronics,buys,Calif)
這些資料能作什麼呢?如果套用HADOOP,找出規則,可以完成textrunner或是www.textmap.com
程式註記
- 文章來源是NewsRepoReaderPOOL
- 文章是TaggedArticle,文章裡面各個段落是TaggedSentence,方法是使用語言處理軟體的sentDetect會取出需要段落,之後使用ChunkerAdaptor ca = new ChunkerAdaptor(tkm.getChunker());ca.chunkify(this);把CHUNK的資料加進去
- Sentence的元件是TaggedWord[] mSentence 文字本身 POS標記 LinkedList
動詞片語,名詞片語之類結構,加入時標記文章段落的開始位置,結束位置,以及TYPE,範圍比TaggedWord大,是由addchunk進入,而這個又是由ChunkerAdaptor的chunkify加入 - 一篇一篇文件讀入articleList
- 選擇兩個其中之一Phase1RelationExtractor() Phase2RelationExtractor()
- re.extract單位是SENTENCE規則1非常簡單,會取出所有的CHUNKS( 不是WORDS )這裡面用寫死的NP VP等等規則,建構出RELATION.規則2複雜很多,主要是想要擷取重要詞彙簡單處理
- rel.annotate(new SentenceNoAnnotation(s_i));rel.annotate(new HumanReadableSentenceAnnotation(s.humanReadableSentence()));
- 執行後的relation存入RelationSet結構體,一篇文章一個RelationSet,各個句子拆分出來的內容是Relation,元件包括Entity(所謂Entity就是一堆字) mSubject;Entity[] mObjects;LinkedList
mAnnotations; 給人看的Predicate mPredicate; 描述敘述??
後續想法,適合已經有完整語言辨識工具系統
沒有留言:
張貼留言