我有大约100 MB的文本,没有任何标记,分为大约10,000个条目。我想自动生成一个“标签”列表。问题是有些单词组(即词组)只有在将它们组合在一起时才有意义。
如果我只计算单词,我会得到很多真正常见的单词(例如,the,for,in,am等)。我已经计算了单词及其前后的单词数量,但是现在我真的不知道下一步该怎么做。存在与2个单词和3个单词相关的信息,但是我该如何提取这些数据?
最佳答案
在开始之前,尝试保留输入文本中有关“边界”的信息。
(如果此类信息尚未丢失,那么您的问题意味着 token 化可能已经完成)
在标记化(在这种情况下为单词解析)过程中,寻找可以定义表达式边界的模式(例如标点符号,尤其是句点,以及多个LF / CR分隔符),也可以使用这些单词。这样的表达式边界通常是“负”的,从某种意义上说,它们将两个标记实例分开,这两个标记实例肯定不会包含在同一表达式中。一些正边界是引号,尤其是双引号。 info可能对过滤掉某些n-gram很有用(请参阅下一段)。此外,诸如“例如”或“代替”或“需要”之类的单词序列也可以用作表达式边界(但使用此类信息是在使用“优先级”(稍后将讨论)。
如果不使用外部数据(输入文本除外),则可以通过对,文本的三字组和trit (连续2个和3个连续单词)进行统计来获得相对成功。然后,[大多数]具有大量(*)实例的序列很可能就是您要查找的“表达式/短语”的类型。
这种有些粗略的方法会产生一些误报,但总的来说可能是可行的。如第一段所述,过滤已知的跨“边界”的n-gram可能会有所帮助,因为在自然语言中,句子的结尾和句子的开头往往来自消息空间的有限子集,因此会产生可能在统计上似乎可以很好地表示出来,但通常在语义上不相关。
更好的方法(可能更昂贵,在处理方面和在设计/投资方面更为昂贵)将使用与输入文本的域和/或本国语言相关的额外“优先级”。
[对不起,现在就去(再加上您特定目标的更多细节,等等。)我将尝试提供更多详细信息并在以后指出]
[顺便说一句,我想在此处插入,乔纳森·费恩伯格(Jonathan Feinberg)和德文·唐克(Dervin Thunk)从这篇文章中回复,因为它们在处理手头任务的方法和工具方面提供了出色的指导。尤其是, NTLK 和 Python大型提供了一个出色的实验框架]