【问题标题】:auto detect tag within a text自动检测文本中的标签
【发布时间】:2012-03-16 08:59:29
【问题描述】:

是否有任何库或算法可以自动检测文本中的标签(忽略所选语言的常用词)?

类似这样的:

string[] keywords = GetKeyword("Your order is num #0123456789")

和关键字[] 将包含“订单”和“#0123456789”...? 它存在吗?还是用户会一直自己选择每个文档的所有标签? :?

【问题讨论】:

  • 你看过正则表达式吗?
  • 您是否要从给定的白名单中过滤掉关键字?
  • 是的,如果没有其他方法可以在不指定任何规则的情况下自动查找单词,我会使用它。 (我知道,我的查询可能很愚蠢......:$)
  • 您能否将输入到程序中的每个单词的实例存储在数据库表中,然后为每个单词递增一个计数器,然后随着时间的推移,使用次数最多的单词将位于桌子的顶部。不过,这并没有说明什么是“重要的”。您对“重要”的定义必须在代码中进行一些定义,可能是使用计数器加上单词的长度,单词越长越“重要”?无论哪种方式都可能超出任何人都可以提供的快速答案,所以我猜!

标签: c# .net algorithm tags keyword


【解决方案1】:
foreach(string keyword in keywords) { // where keywords is a List<string>
    if ("Your order is num #0123456789".Contains(keyword)) {
        keywordsPresent.Add(keyword); // where keywordsPresent is a List<string>
    }
}

return keywordsPresent;

上面的内容不适合您的#0123456789,为此添加更多逻辑来查找# 或其他内容的索引...

【讨论】:

    【解决方案2】:

    对不起,我误解了这个问题。如果您想查找特定的单词,算法将取决于您的字符串。例如,您可以使用 string.Split() 从一个字符串生成一组单词,然后使用它,如下所示:

    string[] words = string.Split("Your order is num #0123456789");
    string orderNumber = "";
    if(words.Contains("order") && w.StartsWith("#").Count > 0)
    {
        orderNumber = words.Where(w=>w.StartsWith("#").FirstOrDefault();
    }
    

    这将首先从 "Your order is num #0123456789" 生成一个单词数组,然后如果它包含单词 "order" 它将缠绕一个以 "#" 开头的单词并选择它;

    【讨论】:

    • 对不起,我不太明白。我不想在文本中查找特定的单词。我想自动检测给定文本的重要单词。
    • @Vloz 什么是“重要词”?
    • 例如,Google 会自动为该网页保留的字词。识别文本中的重要单词是可能的,但可能没有开放的解决方案......:$
    • @Vloz:在设计这样的算法时,很多时候都在定义什么是“重要的词”。谷歌很可能花费了至少 50% 的时间来定义这些术语,一旦你真正知道你想要什么,实现起来并不难。编程通常是关于非常清晰和仔细地定义术语,因此除非您对术语做出明确定义,否则没有人能够帮助您进行实施。
    【解决方案3】:

    我认为可以使用很多不同的算法。其中一些很简单,另一些则超级复杂。我可以建议你下一个基本方法:

    1. 将所有文本拆分为单词数组。
    2. 从数组中删除停用词。 (古尔“停用词列表”以获取停用词的完整列表。)
    3. 遍历数组并计算每个单词的计数。
    4. 按照单词在数组中的“权重”对单词进行排序。
    5. 选择必要数量的标签。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多