2009年4月7日 星期二

[技術]newsterp

和很多專案相比,code.google.com/p/newsterp不大,原本想要達到的目標非常美好,分成兩個部份,第一部分是擷取句子關聯,大致上完成,也取出了很多規則,有達到textrunner目標,第二部份是計劃用這些規則進行CLUSTER或是其他,可惜沒有後續結果.
當文章碎裂到句子程度後,使用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; 描述敘述??

後續想法,適合已經有完整語言辨識工具系統

沒有留言:

張貼留言