-8

我想在段落中创建一个单词映射。例如; 我的字符串是“去面包约翰昨天去是音乐音乐......”。该字符串中的单词映射:music=2,go=2,bread=1,John=1,昨天=1。单词后缀将被视为公共词根。(例如 musics=music)。我在 C# 中进行编码的这个主题怎么样?

4

3 回答 3

0

关于后缀,这只是寻找一个s,您可以修改以寻找其他后缀。

string words = "go bread John yesterday going is music musics";
List<string> wordroots = words.Split(new [] {" "}, StringSplitOptions.RemoveEmptyEntries).ToList();
var rootcount = wordroots
    .Select(wr =>
    {
        if (wr.EndsWith("s"))
            wr = wr.Substring(0, wr.Length - 1);
        return wr;
    })
    .GroupBy(g => g);

foreach (var group in rootcount)
    Console.WriteLine(string.Format("Found word: {0} {1} times.", group.Key, group.Count()));   
于 2013-04-19T14:43:28.627 回答
0

您可以首先将所有复数形式转换为单(或复数)形式,您自己决定,但要保持一致,例如 music=musics。这并不难,因为有 C# 代码来获取复数形式,例如看这篇文章

然后,您可以创建字典:

Dictionary<string, int> data=new Dictionary<string, int>();
foreach(string item in YourInputs)
{
    if(data.ContainsKey(item)
         data[item]++;
    else
         data.Add(item, 1);
}
于 2013-04-19T14:45:39.947 回答
0

您首先需要一个词干库。在这个SO 主题中建议的Snowball似乎是一个不错的起点。

即使使用词干分析器,毫无疑问,您也会从一篇小文章中获得相当多的单词列表,因此跟踪所有这些单词的最佳选择可能是 SQL 数据库。但是,如果您只是暂时需要跟踪这些值,那么一个简单的字符串表可能就可以解决问题。

于 2013-04-19T14:46:32.810 回答