如何处理字符之间有空格的单词?
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 的插件,它是免费和开源的。您可以安装它并优化整个文本。但是考虑一下这个插件是为波斯语而不是达里语创建的。例如,在波斯语中,我们将زندهگی
写为زندگی
,它无法为您纠正这个词。但是像می شود
这样的其他词很容易更正并转换为میشود
。您还可以将自定义词添加到数据库中。
【讨论】:
以上是关于如何处理字符之间有空格的单词?的主要内容,如果未能解决你的问题,请参考以下文章