如何处理字符之间有空格的单词?

Posted

技术标签:

【中文标题】如何处理字符之间有空格的单词?【英文标题】:How to handle with words which have space between characters? 【发布时间】:2018-03-01 07:00:56 【问题描述】:

我在达里语中使用nltk.word_tokenize。问题是我们在一个单词之间有空格。 例如单词"زنده گی",意思是生命。和相同的;我们还有很多其他的话。所有以字符"ه" 结尾的单词我们必须给它一个空格,否则,它可以组合,例如"زندهگی"

谁能帮助我使用[tag:regex] 或任何其他不应该标记一个单词的一部分以"ه" 结尾的单词的方式,然后会有"گ " 字符。

【问题讨论】:

我修改了你的问题。当然你可以再次编辑它;如果我的毁了你的 请编辑您的问题以添加一两句达里语文本,以及您想要的标记化(Python 列表)。 (您可以粘贴nltk.word_tokenize 的输出并手动更正) 谢谢你,因为我是这个论坛的新人。 @TheAfghan 也许你可以标记化并进行后期处理来解决这个问题。只是一个想法,因为它可能会更容易。例如,您可以迭代令牌列表并构建一个新的,如果满足您的条件,则将两个令牌放在一起。 @TheAfghan 你还需要这方面的帮助吗? 【参考方案1】:

为了在波斯语中解决这个问题,我们有一个名为 Zero-width_non-joiner 的字符(或波斯语或半空格或半空格中的 نیم‌فاصله),它有两个符号代码。一个是标准的,另一个不是标准的,但被广泛使用:

    \u200C:http://en.wikipedia.org/wiki/Zero-width_non-joiner \u200F : 从右到左的标记 (http://unicode-table.com/en/#200F)

据我所知,达里语与波斯语非常相似。所以首先你应该把زنده گی之类的所有单词更正为زنده‌گی,并将所有错误的空格转换为半空格,然后你可以简单地使用这个正则表达式来匹配一个句子的所有单词:

[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF\u200C\u200F]+

Online demo(测试字符串中的黑色子弹是半空格,regex101 无法识别,但如果您检查匹配信息部分并查看Match 5,您会发现这是正确的)

为了将大文本的错误空格转换为半空格,有一个用于 Microsoft 单词调用 virastyar 的插件,它是免费和开源的。您可以安装它并优化整个文本。但是考虑一下这个插件是为波斯语而不是达里语创建的。例如,在波斯语中,我们将زنده‌گی 写为زندگی,它无法为您纠正这个词。但是像می شود 这样的其他词很容易更正并转换为می‌شود。您还可以将自定义词添加到数据库中。

【讨论】:

以上是关于如何处理字符之间有空格的单词?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理内容大的响应式引导 3 表?

linux shell 中 如何处理空格的路径?

如何处理我的 JavaScript 作业? [关闭]

我想grep grep一个有空格的单词[复制]

LintCode 53. 翻转字符串

字符串最后一个单词的长度