2012-03-12 75 views
11

我在JSON文件中有30,000多种法语文章。我想对单个文章和整个集合进行一些文本分析。我进一步走之前,我开始用简单的目标:如何使用NLTK和Python标记和块法文文本?

  • 识别重要的实体(人,地点,概念)
  • 查找的重要性,这些实体随时间变化显著(〜=频率)(使用文章序列号作为时间的代理)

我到目前为止所采取的步骤:

  1. 中的数据导入到一个Python列表:

    import json 
    json_articles=open('articlefile.json') 
    articlelist = json.load(json_articles) 
    
  2. 选择单篇文章进行测试,然后连接起来正文为一个字符串:

    txt = ' '.join(data[10000]['body']) 
    
  3. 加载一个法文句子标记生成器和字符串分割成句子的列表:

    nltk.data.load('tokenizers/punkt/french.pickle') 
    tokens = [french_tokenizer.tokenize(s) for s in sentences] 
    
  4. 试图将句子分成使用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) 

我的主要选项(在当前的优先顺序排列)似乎是:

  1. 使用nltk-trainer来训练我自己的标签和chunker。
  2. 只为这部分使用TreeTagger的python包装器,因为TreeTagger已经可以标记法语,并且有人编写了一个调用TreeTagger二进制文件并分析结果的包装器。
  3. 完全使用不同的工具。

如果我要做(1),我想我需要创建自己的带标签的语料库。这是正确的,还是有可能(并预先)使用法国的Treebank?

如果法语Treebank语料库格式(example here)不适合与nltk-trainer一起使用,是否可以将它转换为这种格式?

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

回答

4

以下是一些建议:

  1. WhitespaceTokenizer是做什么的意思。如果你想分割撇号,请尝试WordPunctTokenizer,查看其他可用的标记器,或使用Regexp标记器或直接使用re模块推出自己的标记器。

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

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

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

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

  6. 如果你还没有在nltk-users邮件列表中,我想你会想要的。

+1

+1 WordPunctTokenizer。如果有法国的Treebank,那么这可能是一个很好的培训POS机的资源。如果它需要创建一个自定义语料库阅读器,那么我相信NLTK很乐意将其包含在内。一旦你这样做了,nltk-trainer支持指定一个自定义语料库阅读器。 – Jacob 2012-03-13 01:24:11

+0

谢谢Alexis和Jacob。 我不知道现有的法语标记语料库,所以我可能会先尝试TreeTagger。正如你所说,这可能比编写一个自定义语料库阅读器阅读法语树库更容易。 感谢您的建议重新:nltk用户邮件列表。我在网上档案中阅读了一些以前的帖子,但忘记了订阅。 – Rahim 2012-03-13 02:35:51

5

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

它应该可以使用NLTK这个法国恶搞,使用尼廷Madnani的Interface to the Stanford POS-tagger

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

+0

斯坦福PoS tagger充满了法语的原始html,并且混合了英文单词我不推荐解决方案 – c24b 2015-07-11 15:58:56

+0

Stanford PoS tagger似乎并不是性能方面的最佳方式。将Python与JVM混合并不是真正的Python方法。 – toshiro92 2017-07-09 09:18:28

5

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

相关问题