قبل بضعة أشهر، وجدت مادة معجم صيني (عدة مئات من K) على الإنترنت، ثم أردت أن أكتب برنامج تجزئة الكلمات ليس لدي أي بحث حول تجزئة الكلمات الصينية، لذلك كتبته بناءً على مخيلتي الخاصة. إذا كان هناك خبراء في المجال، من فضلكم أعطوني المزيد من الآراء
1. المكنز
يحتوي المكنز على حوالي 50000 كلمة (يمكنك البحث عنه في جوجل، ويمكن استخدام قاموس مماثل، ألخصه على النحو التالي:
المنطقة 82
).
المهم 81
وكالة أنباء شينخوا 80
التكنولوجيا 80
اللقاء 80
نفسي 79
الكادر 78
الموظفون 78
قداس 77
رقم 77
اليوم 76
مثلي الجنس 76
القسم 75
تعزيز 75
المنظمة 75
العمود الأول هو الكلمة، والعمود الثاني هو الوزن. خوارزمية تجزئة الكلمات التي كتبتها لا تستخدم الوزن حاليًا
2. فكرة التصميم
وصف موجز للخوارزمية:
بالنسبة للسلسلة S، قم بالمسح من الأمام إلى الخلف. ولكل كلمة تم مسحها ضوئيًا، ابحث عن أطول تطابق من المعجم، على سبيل المثال، لنفترض أن S = "أنا مواطن من جمهورية الصين الشعبية"، ويتضمن المعجم "جمهورية الصين الشعبية"، و"الصين"، و"مواطن". "،"شعب"،"جمهورية"... ...وكلمات أخرى. عند مسح كلمة "中"، ابدأ من الحرف الأوسط وخذ 1، 2، 3،... حرفًا ("中" ، "中华"، "中华人") "، "جمهورية الصين الشعبية"، "جمهورية الصين الشعبية"، "جمهورية الصين الشعبية"، "جمهورية الصين الشعبية"، "رئيس جمهورية الصين الشعبية") ، أطول سلسلة مطابقة في المفردات هي "جمهورية الصين الشعبية"، ثم يتقدم الماسح الضوئي في هذه المرحلة إلى كلمة "عام".
بنية البيانات:
اختيار بنية البيانات له تأثير كبير على الأداء لتسجيل المفردات، زوج المفتاح والقيمة هو (المفتاح، عدد الإدخالات لكل كلمة، إذا كانت الكلمة تحتوي على عدد N من الكلمات، فإن 1,1~2,1~3,...1~N من الكلمات). يتم استخدام الكلمة كمفاتيح وإدراجها في _rootTable، وإذا تم تكرار نفس المفتاح، فسيتم زيادة القيم التالية
3.
إجراءات البرنامج المحددة هي كما يلي (يتضمن البرنامج عوامل مثل الوزن وعدد عمليات الإدراج وما إلى ذلك، ولا تستخدم هذه الخوارزمية لكتابة خوارزمية تجزئة كلمات أكثر فعالية):
ChineseWordUnit.cs // struct--(word,weight) Pair.
1 البنية العامة الصينية WordUnit
2 {
3 سلسلة _word خاصة؛
4 قوة خاصة.
5
6 /**//// <الملخص>
7 /// الكلمة الصينية المقابلة لوحدة الكلمة الصينية.
8 /// </الملخص>
9 سلسلة كلمة عامة
10 {
11 الحصول على
12 {
13 إرجاع _كلمة؛
14}
15}
16
17 /**//// <الملخص>
18 /// وزن الكلمة الصينية .
19 /// </الملخص>
20 قوة دولية عامة
واحد وعشرون {
22 الحصول على
ثلاثة وعشرين {
24 قوة العودة؛
25}
26}
27
28 /**//// <الملخص>
29 /// تهيئة الهيكل.
30 /// </summary>
31 /// <param name="word">كلمات صينية</param>
32 /// <param name="power">وزن الكلمة</param>
33 وحدة Word صينية عامة (كلمة سلسلة، قوة int)
34 {
35 هذا._word = كلمة؛
36 هذا._القوة = الطاقة؛
37 }
38 }
ChineseWordsHashCountSet.cs // حاوية المعجم
1 /**//// <الملخص>
2 /// فئة قاموس تسجل عدد المرات التي تظهر فيها سلسلة في مقدمة الكلمة الصينية المسجلة في القاموس الصيني. إذا ظهرت السلسلة "中" في مقدمة كلمة "China"، فسيتم تسجيلها عدة مرات في القاموس.
3 /// </الملخص>
4 فئة عامة من الكلمات الصينيةHashCountSet
5 {
6 /**//// <الملخص>
7 /// Hashtable الذي يسجل عدد مرات ظهور السلسلة في الكلمات الصينية. المفتاح عبارة عن سلسلة محددة، والقيمة هي عدد مرات ظهور السلسلة في الكلمة الصينية.
8 /// </الملخص>
9 Hashtable خاص _rootTable;
10
11 /**//// <الملخص>
12 /// نوع التهيئة.
13 /// </الملخص>
14 كلمة صينية عامةHashCountSet()
15 {
16 _rootTable = new Hashtable();
17}
18
19 /**//// <الملخص>
20 /// الاستعلام عن عدد مرات ظهور السلسلة المحددة في مقدمة الكلمات الصينية المسجلة في القاموس الصيني.
21 /// </الملخص>
22 /// <param name="s">سلسلة محددة</param>
23 /// <returns>عدد مرات ظهور السلسلة في مقدمة الكلمات الصينية المسجلة في القاموس الصيني. إذا كان -1، فهذا يعني أنه لم يظهر. </إرجاع>
24 GetCount العامة (سلسلة)
25 {
26 إذا (!this._rootTable.ContainsKey(s.Length))
27 {
28 عودة -1؛
29 }
30 Hashtable _tempTable = (Hashtable)this._rootTable[s.Length];
31 إذا (!_tempTable.ContainsKey(s))
32 {
33 عودة -1؛
34}
35 العودة (int)_tempTable[s];
36}
37
38 /**//// <الملخص>
39 /// أدخل كلمة في قاموس الأرقام الفرعية. تحليل الكلمة وإدراجها في قاموس العصر.
40 /// </summary>
41 /// <param name="s">السلسلة التي تمت معالجتها. </param>
42 InsertWord باطل عام (سلسلة)
43 {
44 ل(int i=0;i<s.Length;i++)
45 {
46 سلسلة _s = s.Substring(0,i+1);
47 هذا.InsertSubString(_s);
48 }
49 }
50
51 /**//// <الملخص>
52 /// سجل عدد مرات إدراج السلسلة في قاموس الأوقات.
53 /// </summary>
54 /// <param name="s">السلسلة المدرجة. </param>
55 InsertSubString باطلة خاصة (سلسلة)
56 {
57 إذا (!_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 إذا (!_tempTable.ContainsKey(s))
64 {
65 _tempTable.Add(s,1);
66 }
67 آخر
68 {
69 _tempTable[s]=(int)_tempTable[s]+1;
70}
71 }
72 }
ChineseParse.cs //مقطع الكلمات
1 /**//// <summary>
2 /// مجزئ الكلمات الصينية.
3 /// </الملخص>
4. تحليل اللغة الصينية من الدرجة العامة
5 {
6 خاص بـ ChineseWordsHashCountSet _countTable;
7
8 تحليل صيني ثابت ()
9 {
10 _countTable = new ChineseWordsHashCountSet();
11 InitFromFile("ChineseDictionary.txt");
12}
13
14 /**//// <الملخص>
15 /// تهيئة قاموس الكلمات الصينية وقاموس أوقات السلسلة من الملف المحدد.
16 /// </الملخص>
17 /// <param name="fileName">اسم الملف</param>
18 InitFromFile باطل ثابت خاص (اسم ملف السلسلة)
19 {
مسار سلسلة 20 = Directory.GetCurrentDirectory() +@" " + fileName;
21 إذا (ملف. موجود (المسار))
إثنان وعشرون {
23 باستخدام (StreamReader sr = File.OpenText(path))
أربعة وعشرون {
25 سلسلة s = "";
26 بينما ((s = sr.ReadLine()) != فارغة)
27 {
28 ChineseWordUnit _tempUnit = InitUnit(s);
29 _countTable.InsertWord(_tempUnit.Word);
30}
31}
32}
33}
34
35 /**//// <الملخص>
36 /// تحليل سلسلة إلى ChineseWordUnit.
37 /// </summary>
38 /// <param name="s">سلسلة</param>
39 /// <returns>وحدة Word الصينية التي تم تحليلها</returns>
40 وحدة WordUnit الصينية الثابتة الخاصة InitUnit(سلسلة s)
41 {
42 Regex reg = new Regex(@"s+");
43 سلسلة [] درجة الحرارة = reg.Split(s);
44 إذا (درجة الحرارة!=2)
45 {
46 رمي استثناء جديد("خطأ في تحليل السلسلة:"+s);
47 }
48 إرجاع ChineseWordUnit جديدة(temp[0],Int32.Parse(temp[1]));
49 }
50
51 /**//// <الملخص>
52 /// تحليل سلسلة الإدخال وتقطيعها إلى كلمات.
53 /// </summary>
54 /// <param name="s">السلسلة المراد قصها</param>
55 /// <returns>مصفوفة الكلمات الصينية التي تم الحصول عليها عن طريق القطع</returns>
56 سلسلة ثابتة عامة[] ParseChinese(سلسلة s)
57 {
58 int _length = s.Length;
59 سلسلة _temp = String.Empty؛
60 ArrayList _words = new ArrayList();
61
62 ل(int i=0;i<s.Length;)
63 {
64 _temp = s.Substring(i,1);
65 إذا (_countTable.GetCount(_temp)>1)
66 {
67 إنت ي=2;
68
69 لـ (;i+j<s.Length+1&&_countTable.GetCount(s.Substring(i,j))>0;j++)
70 {
71 }
72 _temp = s.Substring(i,j-1);
73 ط = ط + ي - 2؛
74}
75i++;
76 _words.Add(_temp);
77 }
78
79 سلسلة[] _tempStringArray = سلسلة جديدة[_words.Count];
80 _words.CopyTo(_tempStringArray);
81 return _tempStringArray;
82}
83 }
IV.
اختبار مقارن بين الاختبار وبرنامج توضيحي لتجزئة الكلمات الضخمة:
الحالة 1: أخبار سينا الرياضية بعد الإقصاء على يد يوفنتوس، رفض مدرب ريال مدريد فيسنتي دل بوسكي قبول انتقادات وسائل الإعلام لدفاع الفريق، وفي نفس الوقت أيضًا أجرى اختبارًا لتشكيلته الأساسية للدفاع. وقال ديل بوسكي "الهزيمة مسؤولية الفريق بأكمله وليس الدفاع فقط. لا أعتقد أننا لعبنا بشكل فوضوي." وقال بوسكي: "في مباراة اليوم، سنحت لنا بعض الفرص لتعديل النتيجة، لكن المنافسين الذين واجهناهم كانوا أقوياء للغاية ولعبوا بشكل جيد للغاية. يجب أن يكون مشجعونا فخورين بأدائنا في دوري أبطال أوروبا خلال المواسم القليلة الماضية". وبعد المباراة شكك بعض الصحفيين في غياب ديل بوسكي عن كامبياسو في التشكيلة الأساسية، معتبرين أنه يجب إرسال لاعب آخر في الفريق هو بافين لتعزيز الخط الخلفي. وحول هذه الشبهة، رفض ديل بوسكي تحمل ما يسمى بـ"المسؤولية"، معتبراً أنه لا توجد مشكلة في التشكيلة الأساسية للفريق. "لقد فعلنا ذلك بنفس الطريقة التي فعلناها طوال الموسم، وليس لدي ما أقوله عن التغييرات في الموظفين." وفيما يتعلق بآفاق الفريق هذا الموسم، قال بوسكي إن ريال مدريد لا يزال لديه لقب الدوري الإسباني كهدف له.
"
ريال مدريد قاتل حتى النهاية في دوري أبطال أوروبا، وسنفعل نفس الشيء في الدوري"
. الدفاع كما دافع عن تشكيلته الأساسية. وقال بوسكي "الهزيمة مسؤولية الفريق بأكمله وليس الدفاع فقط. لا أعتقد أننا لعبنا في حالة من الفوضى." وقال بوسكي: "لقد أتيحت لنا العديد من الفرص لتعديل النتيجة، لكن المنافس الذي واجهناه كان قوياً للغاية ولعب بشكل جيد للغاية. يجب أن يكون جماهيرنا فخورين بأدائنا في دوري أبطال أوروبا خلال المواسم القليلة الماضية". وبعد المباراة شكك بعض الصحفيين في غياب بوسكي عن كامبياسو في التشكيلة الأساسية، معتبرين أنه يجب إرسال بافين، وهو لاعب آخر في الفريق، لتعزيز الخط الخلفي. وحول هذه الشبهة، رفض ديل بوسكي تحمل ما يسمى بـ"المسؤولية"، معتبراً أنه لا توجد مشكلة في التشكيلة الأساسية للفريق. "لقد فعلنا ذلك بنفس الطريقة التي فعلناها طوال الموسم، وليس لدي ما أقوله عن التغييرات في الموظفين." وفيما يتعلق بآفاق الفريق هذا الموسم، قال ديل بوسكي إن ريال مدريد لا يزال لديه لقب الدوري الإسباني كهدف له.
"ريال مدريد قاتل حتى النهاية في دوريأبطال أوروبا
،
وسنفعل الشيء نفسه في الدوري".
كما دافع عن تشكيلته الأساسية. وقال بوسكي "الهزيمة مسؤولية الفريق بأكمله وليس الدفاع فقط. لا أعتقد أننا لعبنا بشكل فوضوي." وقال بوسكي: "لقد أتيحت لنا عدة فرص للتعويض، لكن المنافسين الذين واجهناهم كانوا أقوياء للغاية ولعبوا بشكل جيد للغاية". وبعد المباراة شكك بعض الصحفيين في غياب بوسكي عن كامبياسو في التشكيلة الأساسية، معتبرين أنه يجب إرسال بافين، وهو لاعب آخر في الفريق، لتعزيز الخط الخلفي. وحول هذه الشبهة، رفض ديل بوسكي تحمل ما يسمى بـ"المسؤولية"، معتبراً أنه لا توجد مشكلة في التشكيلة الأساسية للفريق. "لقد فعلنا ذلك بنفس الطريقة التي فعلناها طوال الموسم، وليس لدي ما أقوله عن التغييرات في الموظفين." وفيما يتعلق بآفاق الفريق هذا الموسم، قال ديل بوسكي إن ريال مدريد لا يزال لديه لقب الدوري الإسباني كهدف له. "لقد قاتل ريال مدريد حتى النهاية في دوري أبطال أوروبا، وسنفعل الشيء نفسه في الدوري."
نظرًا لعدم وجود مفردات احترافية للرياضة والأسماء، لا يستطيع موقع ChineseParse التعرف على هذه الكلمات الاحترافية:
أول مرة في السيارات الصينية المجتمع استغرق التحول الكبير أكثر من عشر سنوات. وفي "السياسة الصناعية لصناعة السيارات" الصادرة عام 1994، كان البند الأكثر لفتًا للانتباه هو "التغيير التدريجي لهيكل استهلاك الأموال العامة لشراء واستخدام السيارات، وخاصة الوكالات الإدارية والمجموعات والمؤسسات والشركات المملوكة للدولة". ومن شراء السيارات بشكل رئيسي بأموال عامة إلى السيارات التي تدخل الأسر تدريجيا، أدى التحول الرئيسي الأول إلى تحسينات هائلة في نوعية حياة الناس. وتتمثل القوى الدافعة الرئيسية لهذا التحول في السياسات الصناعية الواضحة المعالم، والنمو المستدام والسريع للاقتصاد الوطني، وصناعة السيارات المحلية المزدهرة. ومع ذلك، بينما ننتقل بسرعة إلى مجتمع السيارات الذي تهيمن عليه السيارات الخاصة، فإننا نواجه أيضًا مواقف جديدة واختبارات جديدة: تؤكد الحكومة المركزية على إنشاء وتنفيذ النظرة العلمية للتنمية وتطلب من الشركات المحلية تحسين قدراتها الابتكارية المستقلة؛ خلال "الدورتين" لهذا العام، اقترحت الحكومة المركزية أيضًا روح بناء مجتمع متناغم ومجتمع موجه نحو الحفاظ على البيئة؛ وفي الوقت نفسه، يواجه مجتمع السيارات في بلادنا العديد من العوامل غير المواتية مثل نقص الطاقة وارتفاع أسعار الوقود؛ ومحدودية موارد الأراضي. وعلى هذه الخلفية، أصبح من الملح تنفيذ التحول الرئيسي الثاني.
نتائج تجزئة الكلمات على نطاق واسع:
استغرق التحول الرئيسي الأول لمجتمع السيارات في الصين أكثر من عشر سنوات. وفي "السياسة الصناعية لصناعة السيارات" الصادرة عام 1994، كان البند الأكثر لفتًا للانتباه هو "التغيير التدريجي لهيكل استهلاك الأموال العامة لشراء واستخدام السيارات، وخاصة الوكالات الإدارية والمجموعات والمؤسسات والشركات المملوكة للدولة". ومن شراء السيارات بشكل رئيسي بأموال عامة إلى السيارات التي تدخل الأسر تدريجيا، أدى التحول الرئيسي الأول إلى تحسينات هائلة في نوعية حياة الناس. وتتمثل القوى الدافعة الرئيسية لهذا التحول في السياسات الصناعية الواضحة المعالم، والنمو المستدام والسريع للاقتصاد الوطني، وصناعة السيارات المحلية المزدهرة. ومع ذلك، بينما ننتقل بسرعة إلى مجتمع السيارات الذي تهيمن عليه السيارات الخاصة، فإننا نواجه أيضًا مواقف جديدة واختبارات جديدة: تؤكد الحكومة المركزية على إنشاء وتنفيذ النظرة العلمية للتنمية، وتطالب الشركات المحلية بتحسين قدراتها الابتكارية المستقلة؛ خلال "الدورتين" لهذا العام، اقترحت الحكومة المركزية أيضًا روح بناء مجتمع متناغم ومجتمع موجه نحو الحفاظ على البيئة؛ وفي الوقت نفسه، يواجه مجتمع السيارات في بلدي العديد من العوامل غير المواتية مثل نقص الطاقة وارتفاع أسعار الوقود؛ ومحدودية موارد الأراضي. وعلى هذه الخلفية، أصبح من الملح تنفيذ التحول الرئيسي الثاني.
نتائج تحليل الكلمات الصينية:
استغرق التحول الرئيسي الأول لمجتمع السيارات في الصين أكثر من عشر سنوات. وفي "السياسة الصناعية لصناعة السيارات" الصادرة عام 1994، كان البند الأكثر لفتًا للانتباه هو "التغيير التدريجي لهيكل استهلاك الأموال العامة لشراء واستخدام السيارات، وخاصة الوكالات الإدارية والمجموعات والمؤسسات والشركات المملوكة للدولة". ومن شراء السيارات بشكل رئيسي بأموال عامة إلى السيارات التي تدخل الأسر تدريجيا، أدى التحول الرئيسي الأول إلى تحسينات هائلة في نوعية حياة الناس. وتتمثل القوى الدافعة الرئيسية لهذا التحول في السياسات الصناعية الواضحة المعالم، والنمو المستدام والسريع للاقتصاد الوطني، وصناعة السيارات المحلية المزدهرة. ومع ذلك، بينما ننتقل بسرعة إلى مجتمع السيارات الذي تهيمن عليه السيارات الخاصة، فإننا نواجه أيضًا مواقف جديدة واختبارات جديدة: تؤكد الحكومة المركزية على إنشاء وتنفيذ النظرة العلمية للتنمية، وتطالب الشركات المحلية بتحسين قدراتها الابتكارية المستقلة؛ خلال "الدورتين" لهذا العام، اقترحت الحكومة المركزية أيضًا روح بناء مجتمع متناغم ومجتمع موجه نحو الحفاظ على البيئة؛ وفي الوقت نفسه، يواجه مجتمع السيارات في بلدي العديد من العوامل غير المواتية مثل نقص الطاقة وارتفاع أسعار الوقود؛ ومحدودية موارد الأراضي. وعلى هذه الخلفية، أصبح من الملح تنفيذ التحول الرئيسي الثاني.
يمكن ملاحظة أن ChineseParse لا يمكنه معالجة كلمات مثل "المرة الأولى" و"المرة الثانية" بذكاء، وليس لديه القدرة على التعرف على الأرقام، ولكن تأثير تجزئة الكلمات الأساسي لا يزال جيدًا
(بعد كل شيء، أكملت البرنامج في 3 ساعات فكيف يمكن مقارنتها بما جمعه الآخرون في عشر سنوات؟)
يجب أن يكون تحسين البرنامج أعلى من
677.000 كلمة في الثانية
.5. ملخص
ما يجب القيام به أكثر:
1. القدرة على التعرف على اللغات والأرقام الأجنبية البسيطة
2. يتمتع بذكاء بسيط
3. قم بتوسيع المفردات
ومن ثم سيكون لها قيمة عملية
ملاحظة: معظم ما كتبته في الأشهر القليلة الماضية كان عبارة عن برامج صغيرة لمعالجة اللغة الصينية البسيطة، مثل التحويل التقليدي والمبسط، والتنضيد التلقائي، واستبدال الدفعات، وتجزئة الكلمات الصينية، إذا. لدي الوقت، سأقوم بجمع هذه البرامج وتجميعها في أداة معالجة صينية عملية. لا أعرف ما هي احتياجاتك الأخرى، لذلك لا تتردد في إخبارك.