阿拉伯语预处理技术中的问题
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 代码片段