我如何使用NLTK和Python标记和块法文文本?

我在JSON文件中有30,000多种法语文章。 我想对单个文章和整个集合进行一些文本分析。 在我走得更远之前,我先从简单的目标开始:

  • 识别重要的实体(人物,地点,概念)
  • 随着时间的推移发现这些实体重要性(〜=频率)的重大变化(使用文章序号作为时间代理)
  • 我迄今采取的步骤:

  • 将数据导入python列表中:

    import json
    json_articles=open('articlefile.json')
    articlelist = json.load(json_articles)
    
  • 选择一篇文章进行测试,并将正文文本连接成单个字符串:

    txt =  ' '.join(data[10000]['body'])
    
  • 加载了一个法语句子标记器,并将该字符串拆分为一个句子列表:

    nltk.data.load('tokenizers/punkt/french.pickle')
    tokens = [french_tokenizer.tokenize(s) for s in sentences]
    
  • 尝试使用WhiteSpaceTokenizer将句子拆分为单词:

    from nltk.tokenize import WhitespaceTokenizer
    wst = WhitespaceTokenizer()
    tokens = [wst.tokenize(s) for s in sentences]
    
  • 这是我卡住的地方,原因如下:

  • NLTK没有可以将法语分成单词的内置分词器。 空白区域效果不佳,特别是由于它不能正确分隔撇号。
  • 即使我使用正则表达式分解成单个单词,也没有法语PoS(词类)标记符可用于标记这些单词,也没有办法将它们分块为意义的逻辑单元
  • 对于英文,我可以像这样标记和分块文本:

        tagged = [nltk.pos_tag(token) for token in tokens]
        chunks = nltk.batch_ne_chunk(tagged)
    

    我的主要选项(按照当前偏好的顺序)似乎是:

  • 使用nltk-trainer来训练我自己的标签和chunker。
  • 因为TreeTagger已经可以标记法语,并且有人编写了一个调用TreeTagger二进制文件并分析结果的包装器,所以对于TreeTagger仅使用python包装器。
  • 完全使用不同的工具。
  • 如果我要做(1),我想我需要创建自己的标记语料库。 这是正确的,还是有可能(并预先)使用法国的Treebank?

    如果法语Treebank语料库格式(此处为示例)不适合与nltk-trainer一起使用,将其转换为这种格式是否可行?

    NLTK的法语用户采用PoS标签和大块文本的方法是什么?


    从版本3.1.0(2012年1月)开始,斯坦福PoS tagger支持法语。

    应该可以在NLTK中使用这个法语标记器,使用Nitin Madnani与斯坦福POS-标记器的接口

    我还没有尝试过,但它听起来比我考虑的其他方法更容易,我应该能够从Python脚本中控制整个管道。 当我有共享的结果时,我会对此帖子发表评论。


    还有一个带有Python包装的TreeTagger(支持法语语料库)。 这是我目前使用的解决方案,而且效果很好。


    这里有一些建议:

  • WhitespaceTokenizer正在做它的意义。 如果您想分离撇号,请尝试WordPunctTokenizer ,查看其他可用的标记器,或者使用Regexp标记器或直接使用re模块编辑您自己的标记器。

  • 确保你已经解决了文本编码问题(unicode或latin1),否则标记仍然会出错。

  • 正如你发现的那样,nltk只有英文标签。 这听起来像使用TreeTagger将是最少的工作,因为它(几乎)准备好使用。

  • 训练你自己也是一个实际的选择。 但你绝对不应该创建自己的训练语料库! 使用现有的法语标记语料库。 如果培训文字的类型与您的域(文章)匹配,您将获得最佳结果。 另外,您可以使用nltk-trainer,但也可以直接使用NLTK功能。

  • 您可以使用法语Treebank语料库进行培训,但我不知道是否有读者知道其确切格式。 如果没有,您必须从XMLCorpusReader开始,并将其子类化以提供tagged_sents()方法。

  • 如果你还不在nltk-users邮件列表中,我想你会想要继续。

  • 链接地址: http://www.djcxy.com/p/91717.html

    上一篇: How can I tag and chunk French text using NLTK and Python?

    下一篇: Chunking with nltk