我有一个包含各种消息的语料库。我使用NLTK创建了一系列二元语法和三元语法。我通过进行预处理(例如删除停用词和类似的东西)来创建克。
如何获取二元(或三元)单词并搜索以查看新消息中是否存在它?我必须在某个时候对消息进行预处理,不是吗?
或者,如果我可以通过另一种方式执行此操作,那么在创建n-gram的过程中,是否可以对消息建立索引并输出n-gram和它们适用的消息?
最佳答案
您创建n-gram的方法听起来像是一个不错的开始!创建n-gram时,删除停用词,标准化文本格式(删除标点符号,用1替换两个空格等)都是重要的预处理步骤。而且,是的,您是对的:如果您要尝试在一条新消息中查找n-gram,则必须采用与删除其他数据相同的方式对新消息进行预处理停用词等,然后为该新消息生成n-gram。
如果您有很多n-gram(即使您不参加该项目,那仍然是一个好习惯),请尝试创建所有n-gram的矩阵。对于每个文档(以您的情况为消息),请列出您最初在数据中发现的所有n-gram。如果指定的n-gram出现在该特定文档中,则为其分配值1。对于该文档中未出现的n-gram,请将该特定n-gram的得分设为0:
鉴于您可能有很多n-gram(尤其是消息很长的情况),您可能希望研究term frequency inverse-document frequency, or tf-idf
之类的内容,以帮助您/较常见的术语更重地发现/加权稀有术语。就像您通过从数据中删除停用词所指出的那样,常见的术语(例如“ the”,“ and”,“ a”等)(在信息论中我们称为“低信息标记”或低信息词)不会)并不能真正告诉我们有关手头文档的很多信息,其主要主题,也不存在像'the','and','a'这样的词使我们能够将DocumentA与DocumentB区别开来(因为大多数文档的单词都像“ the” ,“和”,“ a”。
这本免费的Introduction to Information Retrieval书中有几章涉及索引构建和索引压缩,在您探索构建和查询索引时可能会有用。如果您来自数学背景并且您熟悉线性代数,我建议您推荐同一作者的另一本书The Foundations of Statistical Natural Language Processing,该书涵盖了与IR教科书相同的材料,但它提供了更多内容IR教科书中涵盖的材料的详尽数学背景。
关于python - NLTK反向n-gram搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52447573/