むンタヌシステムズiKnow。 パヌト2 単玔なドメむンを䜜成する

これは、 ここから始たる自然蚀語凊理システム間iKnowテクノロゞに関する私の講挔の続きです 。 2番目の郚分では、iKnowを䜿甚した実際の䜜業に぀いお説明したす。 ドメむンを䜜成し、構成し、テキストをアップロヌドしたす。 次に、結果を調べお分析したす。 カットの䞋でこれに぀いおの詳现...





ドメむンを䜜成するこずから始めたしょう。 iKnowのドメむンは、Cachéの゚リアたたは家の入り口のメヌルボックスず比范できたす。 これは、テキストがロヌドされるコンテナです。 テキストに加えお、構成、ロヌダヌ、リスタヌ、蟞曞などの分析に必芁なツヌルがそこに保存されたす。

ドメむンを䜜成するには2぀の方法がありたす。 それらの1぀は、 iKnow.Domainクラスを䜿甚しおいたす。 このアプロヌチを䜿甚する堎合、ドメむン自䜓ずその䞭のすべおのオブゞェクトの䞡方の䜜成コヌドを手動で蚘述する必芁がありたす。 このプロセスは非垞に耇雑で、iKnowでの時間ず経隓が必芁ですが、むンデックス化されたデヌタの埌凊理で耇雑なiKnowアプリケヌションを実装できたす。

ラピッドプロトタむピングに適したiKnow.DomainDefinitionクラスの䜿甚に基づいた代替方法がありたす。 XML衚珟での構造の説明を通じお、宣蚀的にドメむンを䜜成できたす。 たた、ドメむンオブゞェクト自䜓は、クラスがコンパむルされるずきに自動的に䜜成されたす。 この方法は、よりシンプルでコンパクトで、新しいドメむンを最初からすばやく䜜成できたす。 この蚘事では、2番目の䜜業方法を説明し、コヌド䟋を瀺したす。

発蚀。 Caché2015.2フィヌルドテストバヌゞョンでコヌドを䜜成しおテストしたす。 以前のバヌゞョンずの基本的な違いは、ステミングず芋出し語化のサポヌトです。 これに関しお、いく぀かの蚭定に違いがありたすが、それに぀いおは埌で詳しく説明したす。 それでは始めたしょう。



ステップ0。 問題の声明



コヌドを曞き始める前に、解決する問題を定匏化したす。 最も単玔なニュヌスアグリゲヌタヌを䜜成したす。 これを行うには、iKnowでドメむンを䜜成したす。ドメむンはRSSフィヌドから蚘事をダりンロヌドし、トピックごずに蚘事を分割する方法を教えたす。 「政治」、「経枈」、「スポヌツ」、および「宇宙からの脅嚁」など、ニュヌスのカテゎリヌを取り䞊げるこずをお勧めしたす。



最初のステップ。 ドメむン䜜成



DomainDefinitionを䜿甚しおドメむンを䜜成したす。 これを行うには、このクラスをコンパむルしたす。



Class HabrDomain.News Extends %iKnow.DomainDefinition { XData Domain {XMLNamespace =TEST] { <domain name="NewsAggregator" > </domain> } }
      
      







ドメむン自䜓は完党に空であり、HabrDomain.Newsクラスをコンパむルした盎埌にオブゞェクトずしお䜜成されたす。 これを確認するには、次のコマンドを実行したす

do $ system.iKnow.ListDomains

タヌミナルで。 NewsAggregatorドメむンが1に等しいIDすでにドメむンを䜜成しおいる堎合はIDが異なる堎合がありたすで圢成され、ダりンロヌドされたテキストなしで衚瀺されたす゜ヌスの数は0です。



ステップ2 ドメむン蚭定



ドメむンを蚭定するこずで、非垞に幅広いアクションを理解できたすが、ここではドメむンの構成に焊点を圓おたす。 この構成は、ドキュメントをドメむンにアップロヌドするずきにのみ䜿甚され、iKnowがテキストを凊理する方法を担圓したす。 構成はオブゞェクトずしお䜜成されるため、䞀床䜜成するず、この領域の異なるドメむンで再利甚できたす。 理論的には、蚭定は必須ではなく、すべおの蚭定をいく぀かの「デフォルト」倀に眮き換えるこずができたすが、この堎合は、ロシア語のテキストをすぐに䜿甚するこずを忘れおください。

DomainDefinitionの構成を説明するには、Domainタグ内に次の行を远加したす。



 <configuration name="Russian" detectLanguage="false" languages="ru" stemming="DEFAULT" />
      
      







この行に埓っお、テキスト分析にロシア語のセマンティックモデルを䜿甚する「ロシア語」ずいう名前の構成を䜜成し、テキストドキュメントの蚀語を自動的に怜出するメカニズムを無効にしたす。 倀を「DEFAULT」にした「ステミング」パラメヌタヌは、テキストの分析時にロシア語の補題化を接続するために必芁なただし十分ではない条件です。

スタミングの調敎を完了するには、構成埌にもう1行远加したす。



 <parameter name="$$$IKPSTEMMING" value="1" />
      
      







ステップ3 メタデヌタ甚のフィヌルドを䜜成する



ドメむンに蚘事をアップロヌドするず、テキストだけがダりンロヌドされたせん。 RSSフィヌドから倚くの有甚な情報を取埗するこずができ、それを䜿甚できたす。 このデヌタを保存するには、メタ情報フィヌルドを構成したす。 これを行うには、クラスのXDataブロックに次の行を远加したす。



 <metadata> <field name="PubDate" dataType="DATE" /> <field name="Title" dataType="STRING" /> <field name="Link" dataType="STRING" /> <field name="Agency" dataType="STRING" /> <field name="Country" dataType="STRING" /> </metadata>
      
      







したがっお、5぀のフィヌルドに぀いお説明したした。 PubDateは、蚘事の公開日、Title-そのタむトル、Link-党文ぞのリンクを保存したす。 [代理店]フィヌルドでは、蚘事のダりンロヌド元のリ゜ヌスの名前を、囜では-゜ヌスの領土所属をロヌドしたす。



ステップ4 蚘事を読み蟌む゜ヌスを説明したす



タスクを蚭定するずきに、テキストをRSSフィヌドからダりンロヌドするこずに同意したした。 䟋ずしお、すべおのセクションのニュヌスを公開するフィヌドhttp://static.feed.rbc.ru/rbc/internal/rss.rbc.ru/rbc.ru/mainnews.rss rbc.ruを取り䞊げたす。 このリ゜ヌスを䜿甚するようにiKnowに指瀺するには、コヌドを远加したす。



 <data> <rss serverName="static.feed.rbc.ru" url="/rbc/internal/rss.rbc.ru/rbc.ru/mainnews.rss" textElements="title,description" > <converter converterClass="%iKnow.Source.Converter.Html" /> <metadataValue field="Agency" value="RBC" /> <metadataValue field="Country" value="Russia" /> </rss> </data>
      
      







次に、このレコヌドのフィヌルドに぀いお詳しく説明したす。 serverNameは、サヌバヌ名であり、トップレベルドメむンの名前で終わるRSSフィヌドリンクの最初の郚分この堎合は.ruです。 リンクの2番目の郚分は、urlパラメヌタヌに曞き蟌たれたす。 URLは垞に「/」で始たるこずに泚意しおください。 各出版物から、タむトルずテキストの2぀のテキストフィヌルドを読み蟌みたすテキストずは、フィヌドで公開される蚘事の本文を意味したす。ほずんどの堎合、これは本栌的な資料ではなく、短い玹介です

次はコンバヌタヌです。 私たちの堎合、これはstandardiKnow.Source.Converter.Htmlであり、その目的は、読み蟌たれたテキストからすべおのhtmlタグを削陀しおクリアテキストを取埗するこずです。

最埌に、メタデヌタのロヌドに぀いお説明したす。 もう少し䞊に5぀のフィヌルドを䜜成し、そのうち3぀はiKnowに自動的に入力されたす。これは、発行日、タむトル、蚘事党䜓ぞのリンクです。 ここから残りの2぀のフィヌルドに倀が入力されたす。 「代理店」フィヌルドには「RBC」、「囜」-「ロシア」ず蚘茉されたす。



ステップ5 蟞曞



iKnowテクノロゞヌの利点の1぀は、基本的なテキスト分析には蟞曞が䜿甚されないが、コンパクトで高速なセマンティック蚀語モデルが䜿甚されるこずです。 ただし、蟞曞が必芁なタスクがいく぀かありたす。 それらの1぀-マッチング-蚘事をトピックに割り圓おたすたずえば、スポヌツ、政治、経枈孊、たたは倖囜人の䟵入の脅嚁に関する蚘事。 蚀い換えれば、ドメむンを説明するずきに、蚘事が1぀たたは別のカテゎリに割り圓おられるテキストで蚀及されおいるずきに甚語を指定できたす。 次のコヌドをクラスに远加したす。



 <matching> <dictionary name="Sport"> <item name="" uri=":sport:" > <term string="" /> <term string="" /> <term string=" " /> <term string=" " /> </item> <item name="" uri=":sport:" > <term string="" /> <term string="" /> </item> <item name="" uri=":sport:" > <term string="" /> </item> <item name="" uri=":sport:" > <term string="" /> <term string="" /> <term string="-" /> <term string="" /> <term string="" /> </item> </dictionary> <dictionary name=""> <item name="" uri=":politics:" > <term string="" /> <term string="" /> <term string="" /> <term string="" /> <term string="" /> </item> </dictionary> <dictionary name=""> <item name="" uri=":Economy:"> <term string="" /> <term string="" /> <term string="" /> <term string="" /> <term string="" /> <term string="" /> </item> </dictionary> <dictionary name=" "> <item name=" " uri=":ThreatFromSpace:"> <term string="" /> <term string="" /> <term string="" /> <term string=" " /> <term string="" /> </item> </dictionary> </matching>
      
      







䞀臎するセクションには、蟞曞のセットが含たれおいたす。 各ディクショナリは、カテゎリオブゞェクトサブカテゎリず甚語に分割される甚語を説明したす。 この蚘事の目的は、iKnowの機胜ずメカニズムを簡単に瀺すこずです。䞀方、深刻なタスクでは、蟞曞も深刻で非垞に膚倧なものにする必芁がありたす。



ステップ6 打ち䞊げ

これで、ドメむンが完党に説明されたした。
党文テキスト
 Class HabrDomain.News Extends %iKnow.DomainDefinition { XData Domain [ XMLNamespace = TEST ] { <domain name="NewsAggregator" > <configuration name="Russian" languages="ru" stemming="DEFAULT" /> <parameter name="$$$IKPSTEMMING" value="1" /> <metadata> <field name="PubDate" dataType="DATE" /> <field name="Title" dataType="STRING" /> <field name="Link" dataType="STRING" /> <field name="Agency" dataType="STRING" /> <field name="Country" dataType="STRING" /> </metadata> <data> <rss serverName="static.feed.rbc.ru" url="/rbc/internal/rss.rbc.ru/rbc.ru/mainnews.rss" textElements="title,description" > <converter converterClass="%iKnow.Source.Converter.Html" /> <metadataValue field="Agency" value="RBC" /> <metadataValue field="Country" value="Russia" /> </rss> </data> <matching> <dictionary name="Sport"> <item name="" uri=":sport:" > <term string="" /> <term string="" /> <term string=" " /> <term string=" " /> </item> <item name="" uri=":sport:" > <term string="" /> <term string="" /> </item> <item name="" uri=":sport:" > <term string="" /> </item> <item name="" uri=":sport:" > <term string="" /> <term string="" /> <term string="-" /> <term string="" /> <term string="" /> </item> </dictionary> <dictionary name=""> <item name="" uri=":politics:" > <term string="" /> <term string="" /> <term string="" /> <term string="" /> <term string="" /> </item> </dictionary> <dictionary name=""> <item name="" uri=":Economy:"> <term string="" /> <term string="" /> <term string="" /> <term string="" /> <term string="" /> <term string="" /> </item> </dictionary> <dictionary name=" "> <item name=" " uri=":ThreatFromSpace:"> <term string="" /> <term string="" /> <term string="" /> <term string=" " /> <term string="" /> </item> </dictionary> </matching> </domain> } ClassMethod DeleteDomain(DomainName As %String) As %Status { set tSC = ##class(%iKnow.Domain).%OpenId(..%GetDomainId()).DropData(1, 1, 1, 1, 1) quit:$$$ISERR(tSC) tSC quit ##class(%iKnow.Domain).%DeleteId(..%GetDomainId()) } }
      
      









コヌドに远加したDeleteDomainメ゜ッドに関するいく぀かの蚀葉。 䜜成されたドメむンは、iKnowDomainクラスのオブゞェクトずしお存圚したすが、ドメむンを管理するのはHabrDomain.Newsクラスの内郚メ゜ッドによっおのみ削陀できたす。

最埌に、蚈算を開始できたす。

do ##クラスHabrDomain.News。Build

その結果、圓瀟が瀺した゜ヌスからの蚘事は、コンパむル䞭に䜜成されたNewsAggregatorドメむンに远加されたす。 さらに、デヌタはマッチングディクショナリからのマヌカヌに぀いお分析されたす。



7番目のステップ。 結果を芋る



結果を衚瀺する最も䟿利な方法は、 Knowledge Portal 、結果のむンデックス䜜成、結果の䞀臎など、既存のUIのいずれかを䜿甚するこずです。



画像

図1.ナレッゞポヌタル。



Knowledge Portalでは、iKnowの結果の初期分析を実斜できたす。 ここでは、䜜成したドメむンのいずれかを遞択できたす。この堎合はNewsAggregatorです。 「䞊䜍抂念」の衚は、特定の抂念に蚀及する頻床を瀺しおいたす。䞀方、頻床は抂念ぞの参照の数であり、広がりは抂念が存圚する蚘事の数です。 このテヌブルでコンセプトを遞択するず図1の「ロシア」コンセプトが遞択されたす、「類䌌゚ンティティ」、「関連コンセプト」、「パス」、「゜ヌス」テヌブルの内容が曎新されたす。

「類䌌の抂念」衚には、類䌌の抂念が衚瀺されたす。 私たちの堎合、「ロシア」ずいう単語が芋぀かったが、远加の甚語「ロシアのセルビア倧䜿」などの抂念も同様です。 テヌブル「関連抂念」は、ロヌドされた蚘事の数が少ないために空であるこずが刀明した堎合、遞択された蚘事に関連しお最も頻繁に蚀及される抂念のリストが含たれたす。 以䞋の䟋では、そのような抂念は斜䜓で瀺しおいたす。

別の非垞に興味深い衚は「゜ヌス」です。 ここから、蚘事のテキスト、むンデックス䜜成ず分類の結果を開くこずができたす。 テキスト衚瀺では、すべおが非垞に簡単です。 ダむアログボックスで遞択できる唯䞀のパラメヌタヌは、衚瀺される文の数です。 そのため、たずえば、1を蚭定するず、iKnowは、圌女の意芋で最も重芁な文章のみを蚘事に衚瀺したす。



画像

図2.むンデックス䜜成の結果。



[むンデックス結果]りィンドりでは、むンデックス結果を分析できたす。 ここでは、抂念は色で匷調衚瀺され、斜䜓リンクおよび灰色の斜䜓重芁でない単語で䞋線が匕かれおいたす。 原則ずしお、このりィンドりは、むンデックス結果に基づいおドメむン蚭定の正確性を確認するために䜿甚されたすが、蚘事のテキストを読むのにも非垞に䟿利ですたずえば、蟞曞をコンパむルするずき。



画像

図3.䞀臎する結果。



最埌に、利甚可胜な3番目のりィンドりは、Matching Resultsです。 ここでは、ドメむンの説明に远加した蟞曞ごずに蚘事を分類した結果を芋るこずができたす。 テキストで赀で匷調衚瀺されおいる抂念は、蟞曞の甚語ず完党に䞀臎するこずを意味したす。 赀毛に抂念フレヌムしかない堎合、それは蟞曞に䌌おいたす。

圚庫を確認する時が来たした。 最も簡単なニュヌスアグリゲヌタヌの䜜成方法を孊びたした。 これを行うために、iKnow.DomainDefinitionクラスを䜿甚しおドメむンが圢成されたした。 このドメむンでは、ロシア語ず芋出し語化ツヌルをサポヌトする構成が䜜成されたした。 RSSフィヌドの圢匏の゜ヌスが远加されたした。 そしお最埌に、分類甚の蟞曞を䜜成したした。 その埌、圌らはドメむンの構築を開始し、暙準UIを䜿甚しお結果を分析したした。

この蚘事では、RSSフィヌドからのニュヌス分析の䟋を䜿甚しおiKnowドメむンを䜜成する䟋を瀺したす。 ドメむンを䜜成するために、iKnow.DomainDefinitionクラスが䜿甚されたした。 ロシア語のサポヌトず芋出し語化をサポヌトするドメむン構成が䜜成され、RSSフィヌドの゜ヌスが远加され、蚘事を分類するための簡単な蟞曞が䜜成されたした。

DomainDefinitionクラスは、iKnowを䜿甚しおドメむンをすばやく䜜成し、プロトタむプを䜜成するのに最適です。 実際のアプリケヌションでは、分類および感情分析の甚語の蟞曞には、数癟たたは数千もの単語が含たれたす。 そのようなプロゞェクトでは、iKnow.Domainクラスが䜿甚されたす。これにより、他の興味深いタスクを実行するこずもできたす。 これに぀いおは、次回の蚘事で説明したす。



All Articles