小编Rah*_*him的帖子

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

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

  • 识别重要的实体(人,地方,概念)
  • 发现这些实体在一段时间内的重要性(〜=频率)发生了重大变化(使用文章序列号作为时间的代理)

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

  1. 将数据导入python列表:

    import json
    json_articles=open('articlefile.json')
    articlelist = json.load(json_articles)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 选择要测试的单个文章,并将正文文本连接成单个字符串:

    txt =  ' '.join(data[10000]['body'])
    
    Run Code Online (Sandbox Code Playgroud)
  3. 加载一个法语句子标记化器并将该字符串拆分为一个句子列表:

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

    from nltk.tokenize import WhitespaceTokenizer
    wst = WhitespaceTokenizer()
    tokens = [wst.tokenize(s) for s in sentences]
    
    Run Code Online (Sandbox Code Playgroud)

这是我被卡住的地方,原因如下:

  • NLTK没有可以将法语分成单词的内置标记器.白色空间不能很好地工作,特别是因为它不会在撇号上正确分离.
  • 即使我使用正则表达式分成单个单词,也没有法语PoS(词性)标记符可用于标记这些单词,并且无法将它们分成逻辑单元的意义

对于英语,我可以像这样标记和分块文本:

    tagged = [nltk.pos_tag(token) for token in tokens]
    chunks = nltk.batch_ne_chunk(tagged)
Run Code Online (Sandbox Code Playgroud)

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

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

如果我做(1),我想我需要创建自己的标记语料库.这是正确的,还是可以(并且允许)使用法国树库?

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

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

python nlp nltk

11
推荐指数
3
解决办法
1万
查看次数

标签 统计

nlp ×1

nltk ×1

python ×1