0

我正在开展一个项目,根据他们用英语交流的方式来确定他们的国籍。我有 10 个国籍和 1000 个文件,每个国籍 100 个。我正在使用 n-gram 作为特征并希望验证我的方法。我的数据结构将具有不同的 n-gram(字符 n-gram、bi-gram,作为列)作为特征和国籍作为标签(作为行)我的步骤是:

  1. 提取给定国籍的所有文件 (FINE)。1.1。将它们组合在一起形成一个文本语料库(例如将 100 个文件组合成一个大文件)。我最初考虑一次获取一个文件并根据它们的出现更新 n-gram 的计数。但是对于每个新的 n-gram,我必须进行查找以查看它是否已经发生,然后针对给定的标签更新其频率。这会是更好的方法吗?
  2. 提取二元/三元并获取每克的频率。(NLTK 有 FreqDist 为每个计数)
  3. 存储这些信息,以便我使用它来对我的测试集进行分类。(我如何存储这些信息。更多信息如下)

问题是我应该将 n-gram 和频率信息存储在矩阵中(具有所有 n-gram 和标签的单个矩阵或每个标签的单独矩阵)还是应该将其存储为地图(每个标签的地图,具有 n -gram 及其频率计数)。我想要一个数据结构(用于存储提取的信息),分类器很容易将其作为输入并处理它们。我无法预见,哪种数据结构会是更好的选择。

4

1 回答 1

1

1) 没关系。如果您有办法单独执行然后合并它,那么如果您将来想要扩展到分布式系统(通常称为 map-reduce 方法),这将有所帮助。

2)好的。

3) n-gram 和频率计数通常不适用于特征分类。您可能希望为每个标签使用单独的矩阵/映射,然后使用 TF-IDF(https://en.wikipedia.org/wiki/Tf%E2%80%93idf)之类的东西来识别具有以下特征的 n-gram一个特定的标签。

4) 在分类方面,您将构建一个固定长度的向量,您可以在其中选择在上一步中为每个标签识别的 ngram 子集,然后将其用于训练和分类。您可能还需要对计数进行某种标准化。

于 2017-06-07T17:48:28.473 回答