場景:博客文章關鍵詞人工提取檢查
描述:
a. 初期關鍵詞內容已由人工提取完成。關鍵詞不含特殊字符,除英文使用的單引號、英文句號之外,不存在任何標點符號
b. 依照語言分爲中文文章、英文文章。(分別處理)
c. 所有語言關鍵詞,詞間分隔符爲空格
d. 中文關鍵詞,以漢字爲結尾,詞的開始和中間允許存在非漢字。也允許存在個別關鍵詞只有英文的情況
e. 英文關鍵詞,以英文+漢字的關鍵詞爲一個英文關鍵詞的結尾,不存在不包含漢字的英文關鍵詞
編寫要求:
a. 提供的關鍵詞樣本爲一個字符串
b. 根據描述,對關鍵詞樣本進行詞語排重操作,即重複出現的關鍵詞只保留一個樣本,其餘的刪除
c. 結果可展示可演示
d. 要求面向對象編程思想
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test2
{
/// <summary>
/// 博客文章關鍵詞提取工具類
/// </summary>
///
class MyKeyWord
{
//關鍵字排重
public static string[] deleteTheSame(string keywordStr)
{
string[] temp = getKeyWords(keywordStr);
List<string> newKeyWords = new List<string>();
foreach (string str in temp)
if (newKeyWords.Contains<string>(str))
continue;
else
newKeyWords.Add(str);
return newKeyWords.ToArray<string>();
}
//獲取關鍵字
public static string[] getKeyWords(string keywordStr)
{
if (isEnglistWord(keywordStr))
return getEnglishKeyWords(keywordStr);
else
return getChinesKeyWords(keywordStr);
}
//判斷是否爲英文關鍵字
public static Boolean isEnglistWord(string keywordStr)
{
string[] temp = getWords(keywordStr);
foreach (string str in temp)
{
for (int i = 0; i < str.Length; i++)
{
byte[] byte_len = Encoding.Default.GetBytes(str.Substring(i, 1));
if (i == 0 && byte_len.Length == 2)
return false;
if (byte_len.Length == 2)
return true;
}
}
return false;
}
//解析單詞
public static string[] getWords(string keywordStr)
{
string[] temp = keywordStr.Split(' ');
List<string> words = new List<string>();
foreach (string tempstr in temp)
{
string str = tempstr.Trim();
if (str != null && str != "")
words.Add(str);
}
return words.ToArray<string>();
}
//獲取英文關鍵字
public static string[] getEnglishKeyWords(string keywordStr)
{
Console.WriteLine("該關鍵字串是英文關鍵字:");
List<string> keywords = new List<string>();
StringBuilder tempstr = new StringBuilder();
string[] temp = getWords(keywordStr);
int flag = 0;
for (int i = 0; i < temp.Length; i++)
{
//Console.WriteLine("danci:"+temp[i]);
byte[] byte_len = Encoding.Default.GetBytes(temp[i].Substring(temp[i].Length - 1, 1));
if (byte_len.Length == 2)
{
for (int j = flag; j <= i; j++)
if (tempstr.Length == 0)
tempstr.Append(temp[j]);
else
tempstr.Append(" " + temp[j]);
flag = i + 1;
keywords.Add(tempstr.ToString());
tempstr.Remove(0, tempstr.Length);
}
}
return keywords.ToArray<string>();
}
//獲取中文關鍵字
public static string[] getChinesKeyWords(string keywordStr)
{
Console.WriteLine("該關鍵字串是中文關鍵字:");
return getWords(keywordStr);
}
}
class Program
{
//測試程序
static void Main(string[] args)
{
string mytest = "China中國 China中國 THE UNITED STATES美國";
Console.WriteLine("英文關鍵字測試:");
Console.WriteLine("原關鍵字串:" + mytest);
string[] keywords = MyKeyWord.deleteTheSame(mytest);
Console.WriteLine("解析後關鍵字串:");
foreach (string temp in keywords)
Console.WriteLine(temp);
mytest = "China 中國 中國 THE UNITED STATES 美國";
Console.WriteLine("中文關鍵字測試:");
Console.WriteLine("原關鍵字串:" + mytest);
keywords = MyKeyWord.deleteTheSame(mytest);
Console.WriteLine("解析後關鍵字串:");
foreach (string temp in keywords)
Console.WriteLine(temp);
Console.ReadKey();
}
}
}