阿拉伯语预处理技术中的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿拉伯语预处理技术中的问题相关的知识,希望对你有一定的参考价值。

我正在尝试在阿拉伯字符串列表上应用预处理技术,但我没有得到正确的结果。

这是我的代码:

import re
import sys
import itertools
from nltk.tokenize import TweetTokenizer
from nltk.stem.isri import ISRIStemmer

foo = 'السـلاام عــليكم 32 هذه تجّربة'
TATWEEL = u"u0640"
stemmer = ISRIStemmer()
tknzr = TweetTokenizer()
text = tknzr.tokenize(foo)

for index in text:
    newList = [i for i in text if not i.isdigit()] # Remove digit 
    newList = ' '.join([i.lower() for i in text if not i.startswith(('@', '#'))]) # Remove mentions and hashtags
    newList = re.sub(r"httpS+", "",index) # Remove links
    newList = stemmer.norm(index, num=1) # #emove diacritics
    newList = re.sub(r'[^ws]','', index)  # Remove punctuation
    newList = index.replace(TATWEEL, '')
    newList = ''.join(i for i, _ in itertools.groupby(index)) # Remove consecutive duplicate

print (newList)

我应该得到的清单是:

السلام عليكم هذه تجربة

但我得到的是:

ربة

当我尝试单独测试每种方法时,它可以工作,但当我将它们聚集在一起时,它就会混乱。

- 我正在使用Python 3

谢谢。

答案

您看到的值是列表text中的最后一项。所有前面的项目都会丢失,因为它们没有存储在任何地方。

此外,for循环体中的操作序列是为newList赋值,但是,newList在后续操作中未被引用,因此任何累积效果都会丢失。

要解决第一个问题,您可以在for循环之前创建一个新的空列表,在处理它们时将附加项目。这将是最终结果列表。

第二个问题将通过在每个步骤中引用index并将结果分配回index来解决。

这是一个解决方案:

import re
import sys
import itertools
from nltk.tokenize import TweetTokenizer
from nltk.stem.isri import ISRIStemmer

foo = 'ﺎﻠﺴـﻻﺎﻣ ﻊــﻠﻴﻜﻣ 32 ﻩﺬﻫ ﺖﺟّﺮﺑﺓ'
TATWEEL = u"u0640"
stemmer = ISRIStemmer()
tknzr = TweetTokenizer()
text = tknzr.tokenize(foo)

result = []     # cleaned strings are stored here

for word in text:
    if word.startswith(('@', '#')):    # filter out hashtags
        continue
    word = word.lower()
    word = ''.join([i for i in word if not i.isdigit()]) # Remove digits
    word = re.sub(r"httpS+", "",word) # Remove links
    word = stemmer.norm(word, num=1) # #emove diacritics
    word = re.sub(r'[^ws]','', word)  # Remove punctuation
    word = word.replace(TATWEEL, '')
    word = ''.join(i for i, _ in itertools.groupby(word)) # Remove consecutive duplicate
    if word:
        result.append(word)

print(' '.join(result))

产量

ﺎﻠﺴﻻﺎﻣ ﻊﻠﻴﻜﻣ ﻩﺬﻫ ﺖﺟ ﺮﺑﺓ
另一答案

有一个特定的rtl语言包,如阿拉伯语名为Hazm.It修改了nltk以与rtl语言兼容。这是链接Hazm

以上是关于阿拉伯语预处理技术中的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

为啥复制阿拉伯语粘贴到Adobe Illustrator 图层中阿拉伯文字顺序倒过来?啥样可以解决这个问题.

调用中的额外参数“方法”。阿拉莫菲尔

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

异常和TCP通讯

Android显示问题 阿拉伯语英语数字混合显示,发生错乱,懂得来,不知道的别瞎说