تُستخدم خوارزمية Nagao لحساب تواتر كل ما تبذلها كل من الإحصاءات ، وبعد ذلك ، وتردد الكلمة ، وعدد الجيران في كل سلسلة ، والإنتروبيا اليسرى واليمين ، والمعلومات التفاعلية (التكثيف الداخلي) من كل سلسلة.
تفسير الاسم:
خوارزمية Nagao: نص إحصائي سريع لجميع خوارزميات التردد الفرعية في النص. يمكن أن تكون الخوارزمية التفصيلية مرئية http://www.doc88.com/P-664123446503.html
تردد الكلمة: عدد المرات التي تظهر فيها السلسلة في المستند. كلما زاد عدد المرات ، كلما كان ذلك أكثر أهمية.
عدد الجيران على اليسار واليمين: عدد الأحرف المختلفة على اليسار واليمين من السلسلة في المستند. كلما زاد عدد الجيران على اليسار واليمين ، زاد احتمال سلسلة كلمة.
إنتروبيا اليسرى واليمين: يوزع عدد الأحرف الموجودة على اليسار واليمين من السلسلة في المستند عدد الأحرف في أحرف مختلفة. على غرار المؤشرات أعلاه ، هناك بعض الاختلافات.
المعلومات التفاعلية: في كل مرة يتم فيها تقسيم السلسلة إلى جزأين ، النصف الأيسر من السلسلة والنصف الأيمن من السلسلة ، ويحسب احتمال ظهوره في نفس الوقت ، باستثناء احتمال استقلالهم ، وأخيراً يأخذ الحد الأدنى الاحتمال في جميع التقسيم. كلما زادت هذه القيمة ، كلما زاد تكثيف السلسلة ، زاد احتمال ذلك.
العملية المحددة للخوارزمية:
1. اقرأ ملف الإدخال واحدًا تلو الآخر ، وفقًا للأحرف غير الصينية ([^/u4e00-/u9fa5]+) وأوقف الكلمات "؟ وهل لم تقل ذلك بعد الذهاب."
تقسيم إلى سلسلة ، الرمز كما يلي:
string [] phrases = line.split ("[^/u4e00-/u9fa5]+| ["+stopwords+"]) ؛
يمكن تعديل كلمات التوقف.
2. احصل على الأسياخ اليمنى واليسر
3. فرز ptable وحساب ltable. سجلات ltable أنه في ptable المصنفة ، فإن الخزانات الفرعية التالية لها نفس العدد من نفس الحرف مع نفس الحرف
4. اجتياز ptable و ltable ، يمكنك الحصول على الكلمات المتكررة لجميع الجيران الفرعية ، الجيران
5. وفقًا لتكرار سلسلة الكلمة ، الجيران الأيسر واليمين ، وتردد الكلمة ، وعدد الجيران ، والإنتروبيا اليسرى واليمين ، والمعلومات التفاعلية لسلسلة الإخراج
1. ناجأالجوريث م. جافا
Package.algo.word ؛ ArrayList ؛ الطبقة العامة nagaoalgorith {private int n ؛ جيد جدا؟ )) ) ؛ Length () ، s2.length () ؛ // split line account to متتالية لا يوجد سلسلة أحرف صينية []] phrasees = line.split ("[^/u4e00-/u9fa5]+| ["+stopwords+"" "") i = 0 ؛ ++) LeftPtable .Add (reversionrase.substring (i)) ؛ int i = 1 ؛ .size ()] ؛ ptable المصنفة والمعسدة اليسرى واليمين ltable ") ؛ t النتيجة الإحصائية: TF ، توزيع الجوار private void countfneighbor () {// get tf والجار الأيمن لـ (int pindex = 0 ؛ pindex <rightptable.size () ؛ = phrase.substring (0 ، طول) ؛ .lender ؛ charat (length)) ؛} else break ؛} wordtfneighbor.ut LeftPtable.get (pindex) ؛ الطول)) ؛ .Lender ؛ ؛} else break ؛}} system.out.println ("info: [Nagao خوارزمية الخطوة 3]]: بعد حساب TF والجار") ؛} // وفقًا لـ Wordtfneighbor ، count mi of word private double countmi (كلمة سلسلة) {if (word.length () <= 1) إرجاع 0 ؛ ؛ LeftPart) .gettf ()/WordNumber ؛ احفظ TF ، (اليسار واليمين) رقم الجوار ، إنتروبيا الجوار ، المعلومات المتبادلة سلسلة void out ، قائمة إيقاف السلسلة ، String [] عتبة) {try {// read stop words set <strong> stopwords = new hassset <string> ( ) ؛ ، mi bufferedWriter bw = new BufferedWriter (new filewriter (owriter (owriter (o ut) ؛ for (map .Ntry <string ، tfneighbor> entry: wordtfneighbor.entryset ()) {if (entrate.getKey (). length (<). = 1|. ) ؛ .parseint (عتبة [3]) {) {) {) {) {) {) {) {stringbuilder sb = new StringBuilder () ؛ "،"). "). إلحاق (MI) .AppND ("/n ") ؛ bw.write (sb.toString ()) ؛}}} bw.close () ؛} catch (ioException e) {throw new runtimeexception (e) ؛ } system.out.println ("info: [Nagao Gelgorithm Step 4]: تم حفظه في ملف") ؛ الخطوة 1: إضافة عبارة إلى خط سلسلة PTABLE ؛ nagao.addtoptable (line) ؛} br.close () ؛} catch (ioException e) {throw new RunTimeException () ؛}}}} tln ( تمت إضافة جميع الفروع اليسرى واليمنى إلى ptable ") ؛ // الخطوة 2: فرز ptable و count ltable nagao.countltapable () ؛ // step3: cou nt tf and neighbor nagao.counttfneighbor () ؛ Mi nagao.savetfneighborinfomi (Out ، stoplist ، "20،3،3،5" .Split ("،") .setn (n) ؛ ؛ )! = NULL) {nagao.addtoptable "؛) عتبة) ؛} e void setn (int n) {n = n ؛} main public static void (string [] args) {string [] ins = {"e: //test/ganfen.txt"} ؛ ، "e: //test/out.txt" ، "e: // test /// stoplist.txt") ؛}}
2. tfneighbor.java
package com.algo. {LeftNeighbor = New HashMap <Charactor ، integer> () ؛ + LeftNeighbor.getordefault (0)) ؛ {//rightneighbor.put (Word ، levleneighbor.getonterfault (Word ، 0)) ؛ } // زيادة tf public void sterrementtf () {tf ++ ؛} public int getleftleneighbornbum () {return leftneighbor.size () ؛ = 0 ؛ Public Double GetRightneighborentropy () {Entropy = 0 ؛ ) إرجاع 0 ؛
3
حزمة com.algo.word ؛ انقسام مع "،" ، مثل belw: // word ، التردد المصطلح ، رقم الجوار الأيسر ، رقم الجوار الأيمن ، إنتروبيا الجوار الأيسر ، إنتروبيا الجوار الأيمن ، ormation المتبادل // الوسيطة الثالثة هي قائمة الكلمات IF (Args.length == 3) nagaoalgorithm.applynagao (args [0] .Split ("،") ، args [1] ، args [2]) ؛ الافتراضي هو "20،3،3،5" // الإخراج TF> 20 && (يسار | يمين) رقم الجوار> 3 && mi> 5 آخر إذا (args.length == 5) .Split ("،") ، args [1] ، args [2] ، integer.parseint (args [3]) ، args [4]) ؛}}}
ما سبق هو كل محتويات هذه المقالة.