مكون كشف الكلمات غير القانونية (الكلمات الحساسة) عالي الأداء، يأتي مع التبادل الصيني التقليدي والمبسط، ويدعم التبادل بالعرض الكامل ونصف العرض، ويحصل على الحرف الأول من بينيين، ويحصل على أحرف بينيين، والبحث الغامض بينيين ووظائف أخرى.
لغة C#
، باستخدام التصفية StringSearchEx2.Replace
، تتجاوز سرعة التصفية للمفردات الحساسة التي يبلغ عددها 48 ألفًا 300 مليون حرف في الثانية. (وحدة المعالجة المركزية i7 8750h)
وصف مجلد csharp:
ToolGood.Pinyin.Build: 生成词的拼音
ToolGood.Pinyin.Pretreatment: 生成拼音预处理,核对拼音,词组最小化
ToolGood.Transformation.Build: 生成简体繁体转换文档,更新时文档放在同一目录下,词库参考 https://github.com/BYVoid/OpenCC
ToolGood.Words.Contrast: 字符串搜索对比
ToolGood.Words.Test: 单元测试
ToolGood.Words: 本项目源代码
فئة الكشف عن الكلمات غير القانونية (الكلمات الحساسة): StringSearch
, StringSearchEx
, StringSearchEx2
, WordsSearch
, WordsSearchEx
, WordsSearchEx2
, IllegalWordsSearch
;
StringSearch
، StringSearchEx
، StringSearchEx2
، StringSearchEx3
: نتيجة البحث التي يتم إرجاعها بواسطة أسلوب FindFirst
هي نوع string
.WordsSearch
و WordsSearchEx
و WordsSearchEx2
و WordsSearchEx3
: نتيجة البحث التي يتم إرجاعها بواسطة أسلوب FindFirst
هي من النوع WordsSearchResult
ولا تحتوي على WordsSearchResult
الرئيسية فحسب، بل تحتوي أيضًا على موضع البداية وموضع النهاية للكلمة الرئيسية والرقم التسلسلي للكلمة الرئيسية وما إلى ذلك.IllegalWordsSearch
: فئة خاصة لتصفية الكلمات غير القانونية (الكلمات الحساسة)، يمكنك ضبط طول الكلمة للتخطي . يتم إرجاع طريقة FindFirst
للبحث IllegalWordsSearchResult
، الذي يحتوي على كلمات رئيسية ويتوافق مع النص الأصلي، والموضع، ونوع القائمة السوداء.IllegalWordsSearch
و StringSearchEx
و StringSearchEx2
و WordsSearchEx
WordsSearchEx2
أساليب Save
Load
لتسريع عملية التهيئة.SetKeywords
و ContainsAny
و FindFirst
و FindAll
و Replace
IllegalWordsSearch
الفريدة: SetSkipWords
(تعيين كلمات التخطي)، SetBlacklist
(تعيين القائمة السوداء).IllegalWordsSearch
UseIgnoreCase
: قم بتعيين ما إذا كنت تريد تجاهل حالة الأحرف أم لا، ويجب أن يكون ذلك قبل أسلوب SetKeywords
. ملاحظة: هذا الحقل غير صالح عند استخدام أسلوب Load
.StringSearchEx3
و WordsSearchEx3
عبارة عن إصدارات محسنة للمؤشر أثناء القياس الفعلي، وجد أن الأداء يتقلب بشكل كبير. string s = "中国|国人|zg人" ;
string test = "我是中国人" ;
StringSearch iwords = new StringSearch ( ) ;
iwords . SetKeywords ( s . Split ( '|' ) ) ;
var b = iwords . ContainsAny ( test ) ;
Assert . AreEqual ( true , b ) ;
var f = iwords . FindFirst ( test ) ;
Assert . AreEqual ( "中国" , f ) ;
var all = iwords . FindAll ( test ) ;
Assert . AreEqual ( "中国" , all [ 0 ] ) ;
Assert . AreEqual ( "国人" , all [ 1 ] ) ;
Assert . AreEqual ( 2 , all . Count ) ;
var str = iwords . Replace ( test , '*' ) ;
Assert . AreEqual ( "我是***" , str ) ;
فئات الكشف عن الكلمات غير القانونية (الكلمات الحساسة): StringMatch
، StringMatchEx
، WordsMatch
، WordsMatchEx
.
يدعم بعض أنواع التعبير العادي: (نقطة .
?
(علامة استفهام) []
(أقواس مربعة) (|)
(أقواس وأشرطة رأسية)
string s = ".[中美]国|国人|zg人" ;
string test = "我是中国人" ;
WordsMatch wordsSearch = new WordsMatch ( ) ;
wordsSearch . SetKeywords ( s . Split ( '|' ) ) ;
var b = wordsSearch . ContainsAny ( test ) ;
Assert . AreEqual ( true , b ) ;
var f = wordsSearch . FindFirst ( test ) ;
Assert . AreEqual ( "是中国" , f . Keyword ) ;
var alls = wordsSearch . FindAll ( test ) ;
Assert . AreEqual ( "是中国" , alls [ 0 ] . Keyword ) ;
Assert . AreEqual ( ".[中美]国" , alls [ 0 ] . MatchKeyword ) ;
Assert . AreEqual ( 1 , alls [ 0 ] . Start ) ;
Assert . AreEqual ( 3 , alls [ 0 ] . End ) ;
Assert . AreEqual ( 0 , alls [ 0 ] . Index ) ; //返回索引Index,默认从0开始
Assert . AreEqual ( "国人" , alls [ 1 ] . Keyword ) ;
Assert . AreEqual ( 2 , alls . Count ) ;
var t = wordsSearch . Replace ( test , '*' ) ;
Assert . AreEqual ( "我****" , t ) ;
// 转成简体
WordsHelper . ToSimplifiedChinese ( "我愛中國" ) ;
WordsHelper . ToSimplifiedChinese ( "我愛中國" , 1 ) ; // 港澳繁体 转 简体
WordsHelper . ToSimplifiedChinese ( "我愛中國" , 2 ) ; // 台湾正体 转 简体
// 转成繁体
WordsHelper . ToTraditionalChinese ( "我爱中国" ) ;
WordsHelper . ToTraditionalChinese ( "我爱中国" , 1 ) ; // 简体 转 港澳繁体
WordsHelper . ToTraditionalChinese ( "我爱中国" , 2 ) ; // 简体 转 台湾正体
// 转成全角
WordsHelper . ToSBC ( "abcABC123" ) ;
// 转成半角
WordsHelper . ToDBC ( "abcABC123" ) ;
// 数字转成中文大写
WordsHelper . ToChineseRMB ( 12345678901.12 ) ;
// 中文转成数字
WordsHelper . ToNumber ( "壹佰贰拾叁亿肆仟伍佰陆拾柒万捌仟玖佰零壹元壹角贰分" ) ;
// 获取全拼
WordsHelper . GetPinyin ( "我爱中国" ) ; //WoAiZhongGuo
WordsHelper . GetPinyin ( "我爱中国" , "," ) ; //Wo,Ai,Zhong,Guo
WordsHelper . GetPinyin ( "我爱中国" , true ) ; //WǒÀiZhōngGuó
// 获取首字母
WordsHelper . GetFirstPinyin ( "我爱中国" ) ; //WAZG
// 获取全部拼音
WordsHelper . GetAllPinyin ( '传' ) ; //Chuan,Zhuan
// 获取姓名
WordsHelper . GetPinyinForName ( "单一一" ) //ShanYiYi
WordsHelper . GetPinyinForName ( "单一一" , "," ) //Shan,Yi,Yi
WordsHelper . GetPinyinForName ( "单一一" , true ) //ShànYīYī
يسعى ToolGood.Words.Pinyin إلى تحقيق سرعة تحميل أسرع (حاليًا رمز C# فقط).
PinyinMatch
: تتضمن الأساليب SetKeywords
و SetIndexs
و Find
و FindIndex
.
PinyinMatch<T>
: تتضمن الأساليب SetKeywordsFunc
و SetPinyinFunc
و SetPinyinSplitChar
و Find
.
string s = "北京|天津|河北|辽宁|吉林|黑龙江|山东|江苏|上海|浙江|安徽|福建|江西|广东|广西|海南|河南|湖南|湖北|山西|内蒙古|宁夏|青海|陕西|甘肃|新疆|四川|贵州|云南|重庆|西藏|香港|澳门|台湾" ;
PinyinMatch match = new PinyinMatch ( ) ;
match . SetKeywords ( s . Split ( '|' ) . ToList ( ) ) ;
var all = match . Find ( "BJ" ) ;
Assert . AreEqual ( "北京" , all [ 0 ] ) ;
Assert . AreEqual ( 1 , all . Count ) ;
all = match . Find ( "北J" ) ;
Assert . AreEqual ( "北京" , all [ 0 ] ) ;
Assert . AreEqual ( 1 , all . Count ) ;
all = match . Find ( "北Ji" ) ;
Assert . AreEqual ( "北京" , all [ 0 ] ) ;
Assert . AreEqual ( 1 , all . Count ) ;
all = match . Find ( "S" ) ;
Assert . AreEqual ( "山东" , all [ 0 ] ) ;
Assert . AreEqual ( "江苏" , all [ 1 ] ) ;
var all2 = match . FindIndex ( "BJ" ) ;
Assert . AreEqual ( 0 , all2 [ 0 ] ) ;
Assert . AreEqual ( 1 , all . Count ) ;
وبعد إجراء 100.000 مقارنة أداء، كانت النتائج كما يلي:
ملاحظة: التنظيم المدمج في لغة C# بطيء جدًا، StringSearchEx2.ContainsAny
أكثر كفاءة بأكثر من 88000 مرة من Regex.IsMatch
، المرتبط بعدد الكلمات الرئيسية.
يعمل Regex.Matches
بشكل مشابه لـ IQueryable
، حيث يُرجع فقط MatchCollection
بدون حساب.
في اختبار البحث عن الكل، (يحتوي النص المكتشف على كلمات حساسة ولن يتم عرضه. يمكنك تصحيح الأخطاء والتحقق منها بنفسك).
يمكن لـ FastFilter
اكتشاف 7 فقط
تم اكتشاف StringSearch
14
فاصل: بعد التدقيق في سحر Regex.Matches
لمدة 3 مللي ثانية، وجدت أن Regex.Matches
به مشكلة صغيرة،
يمكن لـ Regex.Matches
اكتشاف 11 فقط
المؤلف: wenlifan العنوان: https://github.com/wenlifan/SensitiveWordFilter
"نظام مراجعة المحتوى ToolGood" مفتوح المصدر رسميًا، مع نظامي التشغيل Windows وLinux المزدوجين، واستخدام الذاكرة أقل من 100 مليون.
الموقع الرسمي: https://toolgood.com/
كود المصدر المفتوح: https://github.com/toolgood/ToolGood.TextFilter
جمعية أبحاث تصفية المعلومات الحساسة، المجموعة س: 128994346 (كاملة)
أنا لست مدرسًا، لذا يرجى عدم طرح أسئلة بسيطة حول استخدام المشروع أو التحميل أو ما إلى ذلك.
1. أشياء تتعلق بنظام تصفية الكلمات الحساسة
2. نظام مراجعة الكلمات الحساسة للشركة المشتركة
3. الحل للمبتدئين لتصفية الكلمات الحساسة
4. طرق تصفية الكلمات الحساسة شائعة الاستخدام على الإنترنت
5. مبدأ تحسين خوارزمية ToolGood.Words لتصفية الكلمات الحساسة (رسوم 30 يوان، وجبة واحدة في كنتاكي)
6. شرح تفصيلي لتحسين التعليمات البرمجية مفتوحة المصدر ToolGood.TextFilter (رسوم 300 يوان) قارن مع خوارزمية IllegalWordsSearch لشرح نقاط التحسين لخوارزمية تصفية ToolGood.TextFilter وكيفية تقليل استخدام الذاكرة. لا يزال هناك جزء صغير لم يتم كتابته بعد، ويمكن لأولئك الذين نفاد صبرهم شرائه أولاً، وسأواصل تحديثه.
7. خوارزمية DFA منتظمة (إصدار C#، إصدار JAVA) (رسوم 30 يوانًا، وجبة كنتاكي واحدة) إحدى الخوارزميات الأساسية لـ ToolGood.TextFilter تستخدم DFA بشكل منتظم.
8. نسخة C# من الصور الإباحية (مقابل 30 يوانًا، وجبة واحدة في كنتاكي)
تستخدم آلة تصادم المفتاح الخاص للبيتكوين الأداء الخامل للكمبيوتر (ذاكرة 3G) للفوز بـ 250,000 بيتكوين.
آلة تصادم المفتاح الخاص بالبيتكوين (تكلفة 50 يوان)
رمز مصدر آلة تصادم المفتاح الخاص للبيتكوين (تكلفة 500 يوان)