중 영문 키워드 생 성기
7238 단어 키워드
중 영문 키워드 생 성기:
중국 어 는 최대 명중률 2 + 3 의 형식 을 만 들 고 영 어 는 원 어 를 유지 하 며 최소 2 개의 길 이 를 유지 합 니 다.
이 글: 거꾸로 색인, 중국어 2 + 3 길이 유지 의 중요성.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication2
{
class Program
{
static Dictionary<string, int> WordIndex = new Dictionary<string, int>();
static void Main(string[] args)
{
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
WordIndex.Add(" ", 0);
KeyMaker KM = new KeyMaker();
string input = @" Shanghai ABC ";
Console.WriteLine(KM.GetMaxHitKey(input, WordIndex));
input = @" A c c aa Shanghai ABC ";
Console.WriteLine(KM.GetMaxHitKey(input, WordIndex));
Console.WriteLine("----");
Console.Read();
}
public class KeyMaker
{
private Dictionary<string, int> getChinesMaxHitKey(string text, Dictionary<string, int> dict)
{
Dictionary<string, int> D = new Dictionary<string, int>();
List<string> strList = GetAllKey(text);
// , ,
if (strList.Count > 0)
{
int maxValue = -1;
int maxIndex = -1;
for (int i = 0; i < strList.Count; i++)
{
string[] arrA = strList[i].Split(" ".ToCharArray());
int x = 0;
foreach (string a in arrA)
{
x += (dict.ContainsKey(a) ? 1 : 0);
}
if (x > maxValue)
{
maxValue = x;
maxIndex = i;
}
}
string[] arrStr = strList[maxIndex].Split(" ".ToCharArray());
foreach (string a in arrStr)
{
AddDict(D, a, maxValue);
}
}
return D;
}
public string GetMaxHitKey(string text, Dictionary<string, int> dict)
{
Dictionary<string, wordInfo> D = getSegMent(text.ToLower());
Dictionary<string, int> finalDict = new Dictionary<string, int>();
foreach (string K in D.Keys)
{
if (D[K].IsChinese)
{
AddDict(finalDict, getChinesMaxHitKey(K, dict));
}
else
{
AddDict(finalDict, K, 1);
}
}
string re = "";
foreach (string K in finalDict.Keys)
{
re += K + " ";
}
return re.Trim();
}
private List<string> GetAllKey(string text)
{
List<string> strList = new List<string>();
if (text.Length > 1 && text.Length < 30)
{
getKeys(text, text, "", strList);
}
return strList;
}
private void getKeys(string text, string tempText, string resultText, List<string> strList)
{
switch (tempText.Length)
{
case 0:
break;
case 1:
break;
case 2:
strList.Add(resultText.Trim() + " " + text.Substring(text.Length - 2));
break;
case 3:
strList.Add(resultText.Trim() + " " + text.Substring(text.Length - 3));
break;
default:
getKeys(text, tempText.Remove(0, 3), resultText + " " + tempText.Substring(0, 3), strList);
getKeys(text, tempText.Remove(0, 2), resultText + " " + tempText.Substring(0, 2), strList);
break;
}
}
private void AddDict(Dictionary<string, wordInfo> D, string theWord, bool isCHN)
{
if (!D.ContainsKey(theWord))
{
wordInfo WI = new wordInfo();
WI.Word = theWord;
WI.IsChinese = isCHN;
D.Add(theWord, WI);
}
}
private void AddDict(Dictionary<string, int> targetD, Dictionary<string, int> SourceD)
{
foreach (string K in SourceD.Keys)
{
if (!targetD.ContainsKey(K))
{
targetD.Add(K, SourceD[K]);
}
else
{
targetD[K] += SourceD[K];
}
}
}
private void AddDict(Dictionary<string, int> D, string W, int F)
{
if (!D.ContainsKey(W))
{
D.Add(W, F);
}
}
private class wordInfo
{
public string Word = "";
public bool IsChinese = true;
}
private Dictionary<string, wordInfo> getSegMent(string text)
{
Dictionary<string, wordInfo> D = new Dictionary<string, wordInfo>();
Regex RegCHN = new Regex(@"[\u4e00-\u9fa5]{2,}");
foreach (Match M in RegCHN.Matches(text))
{
AddDict(D, M.Value, true);
}
Regex RegEN = new Regex(@"[a-z]{2,}");
foreach (Match M in RegEN.Matches(text))
{
AddDict(D, M.Value, false);
}
return D;
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C++ Builder XE4, 10.2 Tokyo > TMutex, TCriticalSection: thread affinity | TSemaphore: not thread affinity | semaphore의 잠금 코드운영 환경 관련 링크 위의 링크에서는 록이 예상대로는 아니었다. 에서 질문을 했지만 Remy Lebeau에게 자세한 답변을 받았습니다. 답변 개요 (해석 실수가 있을지도 모릅니다) TMutex: thread affi...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.