【问题标题】:Document Features Vector Representation文档特征向量表示
【发布时间】:2012-08-16 06:54:54
【问题描述】:

我正在构建一个文档分类器来对文档进行分类。

因此第一步是将每个文档表示为“特征向量”以用于训练目的。

经过一番研究,我发现我可以使用 Bag of Words 方法或 N-gram 方法将文档表示为向量。

使用 OCR 检索每个文档(扫描的 pdf 和图像)中的文本,因此某些单词包含错误。而且我不了解这些文档中使用的语言(无法使用词干提取)。

据我所知,我必须使用 n-gram 方法。还是有其他方法来表示文档?

如果有人可以将我链接到 N-Gram 指南,以便获得更清晰的图片并了解其工作原理,我将不胜感激。

提前致谢

【问题讨论】:

    标签: algorithm machine-learning document-classification feature-extraction


    【解决方案1】:
    1. 使用语言检测来获取文档的语言(我最喜欢的工具是来自 Tika 项目的LanguageIdentifier,但还有许多其他工具可用)。
    2. 使用拼写更正(有关详细信息,请参阅this question)。
    3. Stem 词(如果您在 Java 环境中工作,Lucene 是您的选择)。
    4. 收集所有 N-gram(见下文)。
    5. 通过从特定文档中提取 n-gram 来制作用于分类的 实例
    6. 构建分类器

    N-gram 模型

    N-gram 只是 N 个项目的序列。在按主题分类时,您通常使用 N-gram 单词或其词根(尽管有基于 N-gram 字符的模型)。最流行的 N-gram 是 unigrams(只是单词)、bigrams(2 个连续单词)和 trigrams(3 个连续单词)。所以,从句子

    你好,我叫弗兰克

    你应该得到以下 unigrams:

    [hello, my, name, is, frank](或 [hello, I, name, be, frank],如果你使用词根)

    以下二元组:

    [hello_my, my_name, name_is, is_frank]

    等等。

    最后,您的特征向量应该具有与所有文本中的单词一样多的位置(维度)加上 1 个未知单词。实例向量中的每个位置都应该以某种方式反映实例文本中相应单词的数量。这可能是出现次数二元特征(如果单词出现则为 1,否则为 0)、标准化特征tf-idf(在按主题分类)。

    分类过程本身与任何其他域相同。

    【讨论】:

    • @ffriend,对不起,我对这里的一些事情感到困惑...... Snowball Analyzer 和 Lucene Analyzer 之间有什么区别?因为我下载了 Lucene 核心库,但它不包含任何 Snowball Analyzer!
    • @TeFa,Lucene 是整个库的名称,所以这个库中的任何一个分析器都是“Lucene 分析器”。 SnowballAnalyzer 是一种流行的分析器,可以通过将语言字符串传递给构造函数来配置不同的语言。您可以在名称为 a-la "lucene-snowball-3.1.1.jar" 或类似名称的 JAR 中找到此分析器。但是,目前 SnowballAnalyzer 是 considered as depricated,建议使用模块/分析中的特定语言分析器。
    • 另请参阅this 问题以了解分析器的工作原理及其组成部分。
    • 是的,我刚刚注意到 SnowballAnalyzer 已被弃用,我应该在 contrib/analyzers 中使用分析器。语言检测和词干现在对我有用:) ...我还找到了一个非常好的语言检测库code.google.com/p/language-detection 因为你建议的那个给了我不正确的结果,不确定我是不是做错了什么或者到底是什么。但非常感谢。没有你的帮助,我无法走到这一步……
    猜你喜欢
    • 1970-01-01
    • 2012-03-05
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2014-05-11
    • 2019-04-16
    相关资源
    最近更新 更多