Vor ein paar Monaten habe ich im Internet ein chinesisches Thesaurusmaterial (mehrere hundert K) gefunden und wollte dann ein Wortsegmentierungsprogramm schreiben. Da ich keine Forschung zur chinesischen Wortsegmentierung habe, habe ich es nach meiner eigenen Vorstellung geschrieben. Wenn es Experten auf diesem Gebiet gibt, geben Sie mir bitte weitere Meinungen.
1. Thesaurus
Der Thesaurus hat etwa 50.000 Wörter (Sie können ihn bei Google durchsuchen, und ich fasse ihn wie folgt zusammen)
.
Wichtig 81
Nachrichtenagentur Xinhua 80
Technologie 80
Treffen 80
ich selbst 79
Kader 78
Mitarbeiter 78
Messe 77
Nr. 77
Heute 76
Schwul 76
Abteilung 75
75 stärken
Organisation 75
Die erste Spalte ist das Wort und die zweite Spalte ist die Gewichtung. Der von mir geschriebene Wortsegmentierungsalgorithmus verwendet derzeit nicht die Gewichtung
2. Designidee
Eine kurze Beschreibung des Algorithmus:
Scannen Sie für eine Zeichenfolge S von vorne nach hinten. Suchen Sie für jedes gescannte Wort die längste Übereinstimmung aus dem Lexikon. Angenommen, S="Ich bin Bürger der Volksrepublik China" und das Lexikon enthält "Volksrepublik China", "China" und "Bürger". ", "Volk", "Republik"... ...und andere Wörter. Wenn das Wort "中" gescannt wird, beginnen Sie mit dem mittleren Zeichen und nehmen Sie 1, 2, 3,... Zeichen ("中" , „中华“, „中华人“) , „Volksrepublik China“, „Volksrepublik China“, „Volksrepublik China“, „Volksrepublik China“, „Fürst der Volksrepublik China“) , die längste passende Zeichenfolge im Vokabular ist „Volksrepublik China“, dann geht der Scanner zum Wort „öffentlich“ über
:
Die Wahl der Datenstruktur hat einen großen Einfluss auf die Leistung Um das Vokabular aufzuzeichnen, ist das Schlüssel-Wert-Paar (Schlüssel, Anzahl der Einfügungen). Wenn das Wort N Wörter hat, dann 1,1~2,1~3,...1~N Wörter Wörter werden als Schlüssel verwendet und in _rootTable eingefügt. Wenn derselbe Schlüssel wiederholt wird, werden die folgenden Werte um
3
erhöht.Die spezifischen Programmverfahren sind wie folgt (das Programm berücksichtigt Faktoren wie Gewicht und Anzahl der Einfügungen). usw., und der aktuelle Algorithmus verwendet diese nicht. Dies kann zum Schreiben eines effektiveren Wortsegmentierungsalgorithmus verwendet werden:
ChineseWordUnit.cs // struct--(word,weight) Paar
1 öffentliche Struktur ChineseWordUnit
2 {
3 private Zeichenfolge _word;
4 private int _power;
5
6 /**//// <Zusammenfassung>
7 /// Das chinesische Wort, das der chinesischen Worteinheit entspricht.
8 /// </summary>
9 öffentliche Zeichenfolge Word
10 {
11 bekommen
12 {
13 return _word;
14}
15}
16
17 /**//// <Zusammenfassung>
18 /// Das Gewicht des chinesischen Wortes.
19 /// </summary>
20 öffentliche int Macht
einundzwanzig {
22 bekommen
dreiundzwanzig {
24 return _power;
25}
26}
27
28 /**//// <Zusammenfassung>
29 /// Strukturinitialisierung.
30 /// </summary>
31 /// <param name="word">Chinesische Wörter</param>
32 /// <param name="power">Das Gewicht des Wortes</param>
33 public ChineseWordUnit(string word, int power)
34 {
35 this._word = Wort;
36 this._power = power;
37 }
38 }
ChineseWordsHashCountSet.cs //Lexikoncontainer
1 /**//// <Zusammenfassung>
2 /// Eine Wörterbuchklasse, die aufzeichnet, wie oft eine Zeichenfolge am Anfang eines im chinesischen Wörterbuch aufgezeichneten chinesischen Wortes erscheint. Wenn die Zeichenfolge „中“ vor „China“ erscheint, wird eine Anzahl von Malen im Wörterbuch aufgezeichnet.
3 /// </summary>
4 öffentliche Klasse ChineseWordsHashCountSet
5 {
6 /**//// <Zusammenfassung>
7 /// Hashtabelle, die aufzeichnet, wie oft eine Zeichenfolge in chinesischen Wörtern vorkommt. Der Schlüssel ist eine bestimmte Zeichenfolge und der Wert gibt an, wie oft die Zeichenfolge im chinesischen Wort vorkommt.
8 /// </summary>
9 private Hashtable _rootTable;
10
11 /**//// <Zusammenfassung>
12 /// Typinitialisierung.
13 /// </summary>
14 öffentliche ChineseWordsHashCountSet()
15 {
16 _rootTable = new Hashtable();
17}
18
19 /**//// <Zusammenfassung>
20 /// Fragen Sie ab, wie oft die angegebene Zeichenfolge am Anfang der im chinesischen Wörterbuch aufgezeichneten chinesischen Wörter erscheint.
21 /// </summary>
22 /// <param name="s">Angegebene Zeichenfolge</param>
23 /// <returns>Die Häufigkeit, mit der die Zeichenfolge am Anfang der im chinesischen Wörterbuch aufgezeichneten chinesischen Wörter erscheint. Wenn es -1 ist, bedeutet dies, dass es nicht angezeigt wird. </returns>
24 public int GetCount(string s)
25 {
26 if (!this._rootTable.ContainsKey(s.Length))
27 {
28 Rückkehr -1;
29 }
30 Hashtable _tempTable = (Hashtable)this._rootTable[s.Length];
31 if (!_tempTable.ContainsKey(s))
32 {
33 Rückkehr -1;
34}
35 return (int)_tempTable[s];
36}
37
38 /**//// <Zusammenfassung>
39 /// Fügen Sie ein Wort in das Subdigit-Wörterbuch ein. Analysieren Sie das Wort und fügen Sie es in das Zeitwörterbuch ein.
40 /// </summary>
41 /// <param name="s">Die Zeichenfolge wurde verarbeitet. </param>
42 public void InsertWord(string s)
43 {
44 for(int i=0;i<s.Length;i++)
45 {
46 string _s = s.Substring(0,i+1);
47 this.InsertSubString(_s);
48 }
49 }
50
51 /**//// <Zusammenfassung>
52 /// Zeichnen Sie auf, wie oft eine Zeichenfolge in das Zeitwörterbuch eingefügt wird.
53 /// </summary>
54 /// <param name="s">Die eingefügte Zeichenfolge. </param>
55 private void InsertSubString(string s)
56 {
57 if (!_rootTable.ContainsKey(s.Length)&&s.Length>0)
58 {
59 Hashtable _newHashtable = new Hashtable();
60 _rootTable.Add(s.Length,_newHashtable);
61 }
62 Hashtable _tempTable = (Hashtable)_rootTable[s.Length];
63 if (!_tempTable.ContainsKey(s))
64 {
65 _tempTable.Add(s,1);
66 }
67 sonst
68 {
69 _tempTable[s]=(int)_tempTable[s]+1;
70}
71 }
72 }
ChineseParse.cs //Word segmenter
1 /**//// <summary>
2 /// Chinesischer Wortsegmentierer.
3 /// </summary>
4 öffentliche Klassen ChineseParse
5 {
6 private static ChineseWordsHashCountSet _countTable;
7
8 statisches ChineseParse()
9 {
10 _countTable = new ChineseWordsHashCountSet();
11 InitFromFile("ChineseDictionary.txt");
12}
13
14 /**//// <Zusammenfassung>
15 /// Initialisieren Sie das chinesische Wortwörterbuch und das Zeichenketten-Zeitwörterbuch aus der angegebenen Datei.
16 /// </summary>
17 /// <param name="fileName">Dateiname</param>
18 private static void InitFromFile(string fileName)
19 {
20 string path = Directory.GetCurrentDirectory() +@" " + fileName;
21 if (File.Exists(path))
zweiundzwanzig {
23 mit (StreamReader sr = File.OpenText(path))
vierundzwanzig {
25 Zeichenfolge s = "";
26 while ((s = sr.ReadLine()) != null)
27 {
28 ChineseWordUnit _tempUnit = InitUnit(s);
29 _countTable.InsertWord(_tempUnit.Word);
30}
31}
32}
33}
34
35 /**//// <Zusammenfassung>
36 /// Analysieren Sie einen String in ChineseWordUnit.
37 /// </summary>
38 /// <param name="s">String</param>
39 /// <returns>Die analysierte ChineseWordUnit</returns>
40 private statische ChineseWordUnit InitUnit(string s)
41 {
42 Regex reg = neuer Regex(@"s+");
43 string[] temp = reg.Split(s);
44 if (temp.Length!=2)
45 {
46 throw new Exception("String-Parsing-Fehler: "+s);
47 }
48 return new ChineseWordUnit(temp[0],Int32.Parse(temp[1]));
49 }
50
51 /**//// <Zusammenfassung>
52 /// Analysieren Sie die Eingabezeichenfolge und schneiden Sie sie in Wörter.
53 /// </summary>
54 /// <param name="s">Zu schneidende Zeichenfolge</param>
55 /// <returns>Array chinesischer Wörter, erhalten durch Schneiden</returns>
56 öffentlicher statischer String[] ParseChinese(string s)
57 {
58 int _length = s.Length;
59 string _temp = String.Empty;
60 ArrayList _words = new ArrayList();
61
62 for(int i=0;i<s.Length;)
63 {
64 _temp = s.Substring(i,1);
65 if (_countTable.GetCount(_temp)>1)
66 {
67 int j=2;
68
69 for (;i+j<s.Length+1&&_countTable.GetCount(s.Substring(i,j))>0;j++)
70 {
71 }
72 _temp = s.Substring(i,j-1);
73 i = i + j - 2;
74}
75i++;
76 _words.Add(_temp);
77 }
78
79 string[] _tempStringArray = neuer String[_words.Count];
80 _words.CopyTo(_tempStringArray);
81 return _tempStringArray;
82}
83 }
IV.
Vergleichstest zwischen Test und massivem Wortsegmentierungs-Demonstrationsprogramm:
Fall 1: Sina Sports News Nach dem Ausscheiden von Juventus weigerte sich Real Madrids Trainer Vicente del Bosque, die Kritik der Medien an der Verteidigung des Teams zu akzeptieren, und gleichzeitig auch führte einen Test für seine Startaufstellung durch. „Die Niederlage liegt in der Verantwortung der gesamten Mannschaft, nicht nur der Verteidigung“, sagte Del Bosque. „Ich glaube nicht, dass wir es bis ins Halbfinale geschafft haben und auf dem Weg dorthin hart gekämpft haben.“ Im heutigen Spiel hatten wir einige Chancen, die Wende zu schaffen, aber die Gegner, denen wir gegenüberstanden, waren sehr stark und sie spielten sehr gut: „Unsere Fans sollten stolz auf unsere Leistung in der Champions League in den letzten paar Saisons sein“, sagte Bosque auch. Nach dem Spiel stellten einige Reporter die Abwesenheit von Del Bosque bei Cambiasso in der Startaufstellung in Frage und waren der Meinung, dass mit Pavin ein weiterer Spieler ins Team geschickt werden sollte, um die Abwehrreihe zu verstärken. Hinsichtlich dieses Verdachts weigerte sich Del Bosque, die sogenannte „Verantwortung“ zu übernehmen und glaubte, dass es kein Problem mit der Startaufstellung des Teams gebe. „Wir haben es so gemacht, wie wir es die ganze Saison über gemacht haben, und zu den personellen Veränderungen kann ich nichts sagen.“ Zu den Aussichten der Mannschaft in dieser Saison sagte Bosque, dass Real Madrid immer noch die La Liga-Meisterschaft als Ziel hat. „Real Madrid hat in der Champions League bis zum Ende gekämpft, und wir werden das Gleiche in der Liga tun.“
Massive Wortsegmentierungsergebnisse:
Sina Sports News Nach dem Ausscheiden gegen Juventus lehnte Real Madrids Trainer Del Bosque die Medienkritik an der Mannschaft ab Verteidigung Er verteidigte auch seine Startaufstellung. „Die Niederlage liegt in der Verantwortung der gesamten Mannschaft, nicht nur der Verteidigung“, sagte Bosque. „Ich glaube nicht, dass wir ins Halbfinale gegangen sind und auf dem Weg zum Aufstieg hart gekämpft haben.“ In diesem Spiel hatten wir mehrere Chancen, die Wende zu erzielen, aber die Gegner, denen wir gegenüberstanden, waren sehr stark und sie spielten sehr gut: „Unsere Fans sollten stolz auf unsere Leistung in der Champions League in den letzten paar Saisons sein“, sagte Bosque auch. Nach dem Spiel stellten einige Reporter Bosques Abwesenheit von Cambiasso in der Startaufstellung in Frage und meinten, dass Pavin, ein weiterer Spieler im Team, geschickt werden sollte, um die Abwehrreihe zu verstärken. Hinsichtlich dieses Verdachts weigerte sich Del Bosque, die sogenannte „Verantwortung“ zu übernehmen und glaubte, dass es kein Problem mit der Startaufstellung des Teams gebe. „Wir haben es so gemacht, wie wir es die ganze Saison über gemacht haben, und zu den personellen Veränderungen kann ich nichts sagen.“ Zu den Aussichten der Mannschaft in dieser Saison sagte Del Bosque, dass Real Madrid immer noch die La Liga-Meisterschaft als Ziel hat. „Real Madrid hat in der Champions League bis zum Ende gekämpft, und wir werden das Gleiche in der Liga tun.“
ChineseParse-Segmentierungsergebnisse:
Sina Sports News Nach dem Ausscheiden gegen Juventus weigerte sich Real Madrids Trainer Del Bosque, Medienkritik an der Verteidigung des Teams zu akzeptieren Er verteidigte auch seine Startaufstellung. „Die Niederlage liegt in der Verantwortung der gesamten Mannschaft, nicht nur der Verteidigung“, sagte Bosque. „Wir sind nicht ins Halbfinale eingezogen und haben hart gekämpft, auch im heutigen Spiel.“ Wir hatten mehrere Chancen, uns zu wenden, aber die Gegner, denen wir gegenüberstanden, waren sehr stark und sie spielten sehr gut: „Unsere Fans sollten stolz auf unsere Leistung in der Champions League in den letzten paar Saisons sein“, sagte Bosque auch. Nach dem Spiel stellten einige Reporter Bosques Abwesenheit von Cambiasso in der Startaufstellung in Frage und meinten, dass Pavin, ein weiterer Spieler im Team, geschickt werden sollte, um die Abwehrreihe zu verstärken. Hinsichtlich dieses Verdachts weigerte sich Del Bosque, die sogenannte „Verantwortung“ zu übernehmen und glaubte, dass es kein Problem mit der Startaufstellung des Teams gebe. „Wir haben es so gemacht, wie wir es die ganze Saison über gemacht haben, und zu den personellen Veränderungen kann ich nichts sagen.“ Zu den Aussichten der Mannschaft in dieser Saison sagte Del Bosque, dass Real Madrid immer noch die La Liga-Meisterschaft als Ziel hat. „Real Madrid hat in der Champions League bis zum Ende gekämpft, und wir werden das Gleiche in der Liga tun.“
Da es kein professionelles Vokabular für Sportarten und Namen gibt, kann ChineseParse diese professionellen Wörter nicht erkennen.
Fall 2: Das erste Mal in Chinas Automobil Gesellschaft Der große Wandel dauerte mehr als zehn Jahre. In der 1994 herausgegebenen „Industriepolitik der Automobilindustrie“ ist der auffälligste Punkt die „schrittweise Änderung der Verbrauchsstruktur öffentlicher Mittel für den Kauf und die Nutzung von Autos, hauptsächlich Verwaltungsbehörden, Gruppen, Institutionen und staatliche Unternehmen“. Von der Anschaffung von Autos hauptsächlich mit öffentlichen Mitteln bis hin zu Autos, die nach und nach in die Haushalte gelangen, hat die erste große Transformation zu enormen Verbesserungen der Lebensqualität der Menschen geführt. Die Hauptantriebskräfte für diesen Wandel sind eine klare Industriepolitik, ein nachhaltiges und schnelles Wachstum der Volkswirtschaft sowie die boomende heimische Automobilindustrie. Da wir uns jedoch rasch in eine von Privatwagen dominierte Automobilgesellschaft bewegen, stehen wir auch vor neuen Situationen und neuen Herausforderungen: Die Zentralregierung legt Wert auf die Festlegung und Umsetzung einer wissenschaftlichen Entwicklungsperspektive und verlangt von inländischen Unternehmen, ihre unabhängigen Innovationsfähigkeiten zu verbessern; Während der diesjährigen „Zwei Sitzungen“ schlug die Zentralregierung auch den Geist des Aufbaus einer harmonischen Gesellschaft und einer umweltbewussten Gesellschaft vor. Gleichzeitig ist die Automobilgesellschaft unseres Landes mit vielen ungünstigen Faktoren wie Energieknappheit und steigenden Kraftstoffpreisen konfrontiert. und begrenzte Landressourcen. Vor diesem Hintergrund ist es dringend erforderlich, die zweite große Transformation durchzuführen.
Massive Ergebnisse der Wortsegmentierung:
Die erste große Transformation der chinesischen Automobilgesellschaft dauerte mehr als zehn Jahre. In der 1994 herausgegebenen „Industriepolitik der Automobilindustrie“ ist der auffälligste Punkt die „schrittweise Änderung der Verbrauchsstruktur öffentlicher Mittel für den Kauf und die Nutzung von Autos, hauptsächlich Verwaltungsbehörden, Gruppen, Institutionen und staatliche Unternehmen“. Von der Anschaffung von Autos hauptsächlich mit öffentlichen Mitteln bis hin zu Autos, die nach und nach in die Haushalte gelangen, hat die erste große Transformation zu enormen Verbesserungen der Lebensqualität der Menschen geführt. Die Hauptantriebskräfte für diesen Wandel sind eine klare Industriepolitik, ein nachhaltiges und schnelles Wachstum der Volkswirtschaft sowie die boomende heimische Automobilindustrie. Da wir uns jedoch rasch in eine von Privatwagen dominierte Automobilgesellschaft hineinbewegen, stehen wir auch vor neuen Situationen und neuen Herausforderungen: Die Zentralregierung legt Wert auf die Festlegung und Umsetzung der wissenschaftlichen Entwicklungsperspektive und verlangt von inländischen Unternehmen, ihre unabhängigen Innovationsfähigkeiten zu verbessern; Während der diesjährigen „Zwei Sitzungen“ schlug die Zentralregierung auch den Geist des Aufbaus einer harmonischen Gesellschaft und einer umweltbewussten Gesellschaft vor. Gleichzeitig ist die Automobilgesellschaft meines Landes mit vielen ungünstigen Faktoren wie Energieknappheit und steigenden Kraftstoffpreisen konfrontiert. und begrenzte Landressourcen. Vor diesem Hintergrund ist es dringend erforderlich, die zweite große Transformation durchzuführen.
Ergebnisse der ChineseParse-Wortsegmentierung:
Die erste große Transformation der chinesischen Automobilgesellschaft dauerte mehr als zehn Jahre. In der 1994 herausgegebenen „Industriepolitik der Automobilindustrie“ ist der auffälligste Punkt die „schrittweise Änderung der Verbrauchsstruktur öffentlicher Mittel für den Kauf und die Nutzung von Autos, hauptsächlich Verwaltungsbehörden, Gruppen, Institutionen und staatliche Unternehmen“. Von der Anschaffung von Autos hauptsächlich mit öffentlichen Mitteln bis hin zu Autos, die nach und nach in die Haushalte gelangen, hat die erste große Transformation zu enormen Verbesserungen der Lebensqualität der Menschen geführt. Die Hauptantriebskräfte für diesen Wandel sind eine klare Industriepolitik, ein nachhaltiges und schnelles Wachstum der Volkswirtschaft sowie die boomende heimische Automobilindustrie. Da wir uns jedoch rasch in eine von Privatwagen dominierte Automobilgesellschaft hineinbewegen, stehen wir auch vor neuen Situationen und neuen Herausforderungen: Die Zentralregierung legt Wert auf die Festlegung und Umsetzung der wissenschaftlichen Entwicklungsperspektive und verlangt von inländischen Unternehmen, ihre unabhängigen Innovationsfähigkeiten zu verbessern; Während der diesjährigen „Zwei Sitzungen“ schlug die Zentralregierung auch den Geist des Aufbaus einer harmonischen Gesellschaft und einer umweltbewussten Gesellschaft vor. Gleichzeitig ist die Automobilgesellschaft meines Landes mit vielen ungünstigen Faktoren wie Energieknappheit und steigenden Kraftstoffpreisen konfrontiert. und begrenzte Landressourcen. Vor diesem Hintergrund ist es dringend erforderlich, die zweite große Transformation durchzuführen.
Es ist ersichtlich, dass ChineseParse Wörter wie „erstes Mal“ und „zweites Mal“ nicht intelligent verarbeiten kann und keine Zahlen erkennen kann, aber der grundlegende Wortsegmentierungseffekt ist immer noch in Ordnung
(Immerhin habe ich das Programm abgeschlossen 3 Stunden, wie kann man das mit dem vergleichen, was andere in zehn Jahren gesammelt haben?)
Leistungstest (Centrino 1.5M): 677.000 Wörter pro Sekunde.
Programmoptimierung sollte höher sein.
5. Zusammenfassung dessen,
was weiter getan werden sollte.
1. Kann einfache Fremdsprachen und Zahlen erkennen
2. Einfache Intelligenz haben
3. Erweitern Sie den Wortschatz
, dann wird er einen praktischen Wert haben.
Hinweis: Das meiste, was ich in den letzten Monaten geschrieben habe, war die einfache Verarbeitung kleiner Programme wie traditionelle und vereinfachte Konvertierung, automatischer Schriftsatz, Stapelersetzung und chinesische Wortsegmentierung Ich habe Zeit, ich werde diese Programme sammeln und in ein praktisches chinesisches Verarbeitungstool packen. Ich weiß nicht, welche anderen Bedürfnisse Sie haben, also kann ich es Ihnen gerne sagen.