???????????????
Run Code Online (Sandbox Code Playgroud)
itu oru stalam anu
这是一个Unicode字符串,这意味着这是一个地方
import nltk
nltk.wordpunct_tokenize('??????????????? '.decode('utf8'))
Run Code Online (Sandbox Code Playgroud)
不适合我.
nltk.word_tokenize('??????????????? '.decode('utf8'))
Run Code Online (Sandbox Code Playgroud)
也没有其他例子
"???????? " = ????? +????,
"???????" = ???? + ???
Run Code Online (Sandbox Code Playgroud)
右分裂:
??? ??? ?????? ???
Run Code Online (Sandbox Code Playgroud)
输出:
[u'\u0d07\u0d24\u0d4d\u0d12\u0d30\u0d41\u0d38\u0d4d\u0d25\u0d32\u0d02\u0d06\u0d23\u0d4d']
Run Code Online (Sandbox Code Playgroud)
我只需要拆分单词,如另一个例子中所示.其他示例部分用于测试.问题不在于Unicode.它具有语言形态.为此你需要使用形态分析器
看看这篇论文.
http://link.springer.com/chapter/10.1007%2F978-3-642-27872-3_38
alv*_*vas 20
在维基百科(http://en.wikipedia.org/wiki/Malayalam)的语言速成课程之后,您的问题中存在一些问题以及您为所需输出请求的工具.
配置任务
首先,OP将形态分析,分割和标记化的任务混为一谈.通常,对于诸如土耳其语/马拉雅拉姆语之类的集体语言(见http://en.wikipedia.org/wiki/Agglutinative_language),有一个很好的区别.
Agglutinative NLP和最佳实践
接下来,我认为tokenizer不适合马拉雅拉姆语,这是一种凝聚性语言.作为NLP中研究最多的一种集体语言,土耳其语在"标记化"方面采用了不同的策略,他们发现需要一个完整的形态分析器(见http://www.denizyuret.com/2006/11/) turkish-resources.html,www.andrew.cmu.edu/user/kor/downloads/lrec.pdf).
词边界
标记化被定义为从表面文本中识别语义上有意义的单元(LMU)(参见为什么我需要为每种语言使用标记化器?)并且不同的语言需要不同的标记化器来识别不同语言的单词边界.不同的人已经解决了查找单词边界不同的问题,但总结在NLP中,人们订阅了以下内容:
Agglutinative Languages需要使用某种语言模型训练的完整形态分析器.在识别token语素级别的内容时,通常只有一个层次,因此NLP社区为各自的形态分析工具开发了不同的语言模型.
Polysynthetic具有指定单词边界的语言可以选择两层tokenization,系统可以首先识别一个孤立的单词,然后在必要时进行形态分析以获得更精细的颗粒标记.粗粒度标记器可以使用某个分隔符(例如NLTK word_tokenize或punct_tokenize使用英文空格/标点符号)来分割字符串.然后,对于语素级别的细粒度分析,人们通常会使用一些有限状态机将单词分成语素(例如德语http://canoo.net/services/WordformationRules/Derivation/To-N/N-To-N /Pre+Suffig.html)
没有指定单词边界的Polysynthetic Langauges通常需要分段器首先在标记之间添加空格,因为正字法不区分单词边界(例如,使用中文https://code.google.com/p/mini-segmenter/).然后,如果需要,可以从分隔的标记进行语素分析以生成更精细的谷物标记(例如http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html).通常,这种更精细的谷物代币与POS标签捆绑在一起.
对于OP的请求/问题的简要回答,OP使用了错误的工具来完成任务:
tokens马拉雅拉姆语,必须使用形态分析器,NLTK中的简单粗粒度标记器不起作用.re.split()以实现基线标记化的常见分隔符.我尝试了以下方法:
\n\n# encoding=utf-8\n\nimport nltk\ncheese = nltk.wordpunct_tokenize('\xe0\xb4\x87\xe0\xb4\xa4\xe0\xb5\x81\xe0\xb4\x92\xe0\xb4\xb0\xe0\xb5\x81\xe0\xb4\xb8\xe0\xb5\x8d\xe0\xb4\xa5\xe0\xb4\xbe\xe0\xb4\xb2\xe0\xb4\xae\xe0\xb4\xbe\xe0\xb4\xa3\xe0\xb5\x8d'.decode('utf8'))\nfor var in cheese:\n print var.encode('utf8'),\nRun Code Online (Sandbox Code Playgroud)\n\n作为输出,我得到以下内容:
\n\n\xe0\xb4\x87\xe0\xb4\xa4 \xe0\xb5\x81 \xe0\xb4\x92\xe0\xb4\xb0 \xe0\xb5\x81 \xe0\xb4\xb8 \xe0\xb5\x8d \xe0\xb4\xa5 \xe0\xb4\xbe \xe0\xb4\xb2\xe0\xb4\xae \xe0\xb4\xbe \xe0\xb4\xa3 \xe0\xb5\x8d\nRun Code Online (Sandbox Code Playgroud)\n\n这是否接近您想要的输出,我在这里有点一无所知,因为在不理解语言的情况下很难做到这一点。
\n