コード例 #1
0
def extract_number_context(text, ):
    """
    Extract number words in a text within context.

    Example:
        >>> extract_number_context(u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا")
        ‎وجدت، خمسمئة وثلاثة وعشرين، دينارا
        ‎فاشتريت، ثلاثة عشر ، دفتر

    @param text: input text
    @type text: unicode
    @return: number words extracted from text
    @rtype: integer
    """
    phrases = []
    wordlist = araby.tokenize(text)
    positions = detect_number_phrases_position(wordlist)

    for pos in positions:
        if len(pos) >= 2:
            if pos[0] <= len(wordlist) and pos[1] <= len(wordlist):
                if pos[0] - 1 >= 0:
                    prev = wordlist[pos[0] - 1]
                else:
                    prev = u''
                if pos[1] + 1 < len(wordlist):
                    nextword = wordlist[pos[1] + 1]
                else:
                    nextword = u''
                phrases.append( \
                    (prev, u' '.join(wordlist[pos[0]:pos[1] + 1]), nextword))
    return phrases
コード例 #2
0
def detectNumberWords(text):
	"""
	Detect number words in a text.
	@param text: input text
	@type text: unicode
	@return : number words extracted from text
	@rtype: integer
	>>> text2number(u"وجدت خمسمئة وثلاثة وعشرين دينارا");
	خمسمئة وثلاثة وعشرين
	"""

	words=araby.tokenize(text)
	#print words;
	phrasesContext=extractNumberPhrasesWithinContext(text);
	for phCon in phrasesContext:
		if len(phCon)>=3:
			previous=phCon[0];
			phrase=phCon[1];
			next=phCon[2];
			numberedwords=phrase;
			numeric = text2number(numberedwords);
			tags = getPreviousTag(previous);
			vocalized = vocalizeNumber(araby.stripTashkeel(numberedwords).split(' '), tags);				
			#calcul  vocalization similarity : 
			sim = araby.vocalizedSimilarity(numberedwords, vocalized);
			vocUnit=vocalizeUnit(numeric, next);
			simUnit = araby.vocalizedSimilarity(vocUnit, next);					
			if sim<0:
				print(u'\t'.join([str(sim), numberedwords, vocalized, str(numeric), u' '.join([previous,phrase, next]), next, vocUnit, str(simUnit)]).encode('utf8'));
コード例 #3
0
ファイル: number.py プロジェクト: abougouffa/pyarabic
def detectNumberWords(text):
	"""
	Detect number words in a text.
	@param text: input text
	@type text: unicode
	@return : number words extracted from text
	@rtype: integer
	>>> text2number(u"وجدت خمسمئة وثلاثة وعشرين دينارا");
	خمسمئة وثلاثة وعشرين
	"""

	words=araby.tokenize(text)
	#print words;
	phrasesContext=extractNumberPhrasesWithinContext(text);
	for phCon in phrasesContext:
		if len(phCon)>=3:
			previous=phCon[0];
			phrase=phCon[1];
			next=phCon[2];
			numberedwords=phrase;
			numeric = text2number(numberedwords);
			tags = getPreviousTag(previous);
			vocalized = vocalizeNumber(araby.stripTashkeel(numberedwords).split(' '), tags);				
			#calcul  vocalization similarity : 
			sim = araby.vocalizedSimilarity(numberedwords, vocalized);
			vocUnit=vocalizeUnit(numeric, next);
			simUnit = araby.vocalizedSimilarity(vocUnit, next);					
			if sim<0:
				print u'\t'.join([str(sim), numberedwords, vocalized, str(numeric), u' '.join([previous,phrase, next]), next, vocUnit, str(simUnit)]).encode('utf8');
コード例 #4
0
def extractNumberPhrasesWithinContext(text):
	"""
	Extract number words in a text.
	@param text: input text
	@type text: unicode
	@return : number words extracted from text
	@rtype: integer
	>>> extractNumberPhrasesWithinContext(u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا");
	وجدت، خمسمئة وثلاثة وعشرين، دينارا
	 فاشتريت، ثلاثة عشر ، دفترا
	"""
	phrases=[];
	wordlist = araby.tokenize(text);
	positions= detectNumberPhrasesPosition(wordlist);

	for pos in positions:
		if len(pos)>=2:
			if pos[0]<=len(wordlist) and pos[1]<=len(wordlist):
				if pos[0]-1>=0: 
					previous= wordlist[pos[0]-1];
				else: previous=u'';
				if pos[1]+1<len(wordlist): 
					next= wordlist[pos[1]+1];
				else: next=u'';
				phrases.append((previous, u' '.join(wordlist[pos[0]: pos[1]+1]), next))
	return phrases;
コード例 #5
0
ファイル: number.py プロジェクト: abougouffa/pyarabic
def extractNumberPhrasesWithinContext(text):
	"""
	Extract number words in a text.
	@param text: input text
	@type text: unicode
	@return : number words extracted from text
	@rtype: integer
	>>> extractNumberPhrasesWithinContext(u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا");
	وجدت، خمسمئة وثلاثة وعشرين، دينارا
	 فاشتريت، ثلاثة عشر ، دفترا
	"""
	phrases=[];
	wordlist = araby.tokenize(text);
	positions= detectNumberPhrasesPosition(wordlist);

	for pos in positions:
		if len(pos)>=2:
			if pos[0]<=len(wordlist) and pos[1]<=len(wordlist):
				if pos[0]-1>=0: 
					previous= wordlist[pos[0]-1];
				else: previous=u'';
				if pos[1]+1<len(wordlist): 
					next= wordlist[pos[1]+1];
				else: next=u'';
				phrases.append((previous, u' '.join(wordlist[pos[0]: pos[1]+1]), next))
	return phrases;
コード例 #6
0
def extractNumberPhrases(text):
	"""
	Extract number words in a text.
	@param text: input text
	@type text: unicode
	@return : number words extracted from text
	@rtype: integer
	>>> extractNumberPhrases(u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا");
	خمسمئة وثلاثة وعشرين
	ثلاثة عشر 
	"""
	phrases=[];

	wordlist = araby.tokenize(text)#text.split(' ');
	positions= detectNumberPhrasesPosition(wordlist);

	for pos in positions:
		if len(pos)>=2:
			if pos[0]<=len(wordlist) and pos[1]<=len(wordlist):
				phrases.append(u' '.join(wordlist[pos[0]: pos[1]+1]))
	return phrases;
コード例 #7
0
ファイル: number.py プロジェクト: abougouffa/pyarabic
def extractNumberPhrases(text):
	"""
	Extract number words in a text.
	@param text: input text
	@type text: unicode
	@return : number words extracted from text
	@rtype: integer
	>>> extractNumberPhrases(u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا");
	خمسمئة وثلاثة وعشرين
	ثلاثة عشر 
	"""
	phrases=[];

	wordlist = araby.tokenize(text)#text.split(' ');
	positions= detectNumberPhrasesPosition(wordlist);

	for pos in positions:
		if len(pos)>=2:
			if pos[0]<=len(wordlist) and pos[1]<=len(wordlist):
				phrases.append(u' '.join(wordlist[pos[0]: pos[1]+1]))
	return phrases;
コード例 #8
0
ファイル: test_araby.py プロジェクト: karimamer/pyarabic
 def test_tokenize(self):
     """Test  tokenize function ?"""
     text1 = u"العربية: لغة جميلة."
     wordlist = [u'العربية', u":", u"لغة", u"جميلة", u"."]
     self.assertEqual(ar.tokenize(text1), wordlist)
コード例 #9
0
 # import number as ArabicNumberToLetters
 TEXTS = [u"مليونان وألفان وإثنا عشر",
          u"جاء مليونان وألفان وإثنا عشر",
          u"وجدت خمسمئة وثلاث وعشرون دينارا",
          u"خمسمئة وثلاث وعشرون دينارا",
          u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا",
          u"لم أجد شيئا",
          u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا",
          u'من ثلاثمئة وخمسين بلدا ',
          u'من ثلاثمئة وخمسين بلدا ',
          u'من أربعمئة وخمسين بلدا ',
          u'السلام عليكم 2014',
          ]
 # ~ arepr = arabrepr.ArabicRepr()
 for txt in TEXTS:
     word_list = araby.tokenize(txt)
     positions_phrases = detect_number_phrases_position(word_list)
     print(positions_phrases)
     nb_phrases = extract_number_phrases(txt)
     tag_list = detect_numbers(word_list)
     print(tag_list)
     print(u" ".join(word_list))
     print(zip(tag_list, word_list))
     print('tashkeel')
     tashkeel = u" ".join(pre_tashkeel_number(word_list))
     if sys.version_info < (3, 0):
         print(tashkeel.encode('utf8'))
     else:
         print(tashkeel)
     print(u'\t'.join(nb_phrases))
     print("detect number word")
コード例 #10
0
				# get the context of current number phrase
				if startPos-1>=0:  previous= wordlist[startPos-1];
				else: previous=u'';
				if endPos+1<len(wordlist): 	next= wordlist[endPos+1];
				else: next=u'';
				#get the tag of previous word
				tags = getPreviousTag(previous);
				vocalized = vocalizeNumber(wordlist[startPos: endPos+1], tags);				
				wordlist = wordlist[:startPos] + vocalized  +wordlist[endPos+1:]
	return wordlist;
if __name__ == '__main__':
	#import number as ArabicNumberToLetters
	texts=[u"مليونان وألفان وإثنا عشر", 
	u"جاء مليونان وألفان وإثنا عشر", 
	u"وجدت خمسمئة وثلاث وعشرون دينارا",
		u"خمسمئة وثلاث وعشرون دينارا",
	u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا",
	u"لم أجد شيئا",
	u'من ثلائمئة وخمسين بلدا ',
		u'من ثلاثمئة وخمسين بلدا ',
	u'من أربعمئة وخمسين بلدا ',
	];
	for text in texts:
		# result = detectNumberWords(text);
		# print u";".join(result).encode('utf8');
		positions= detectNumberPhrasesPosition(araby.tokenize(text));
		print(positions);
		phrases = extractNumberPhrases(text);
		print(text.encode('utf8'));
		print(u'\t'.join(phrases).encode('utf8'));
コード例 #11
0
ファイル: number.py プロジェクト: abougouffa/pyarabic
				# get the context of current number phrase
				if startPos-1>=0:  previous= wordlist[startPos-1];
				else: previous=u'';
				if endPos+1<len(wordlist): 	next= wordlist[endPos+1];
				else: next=u'';
				#get the tag of previous word
				tags = getPreviousTag(previous);
				vocalized = vocalizeNumber(wordlist[startPos: endPos+1], tags);				
				wordlist = wordlist[:startPos] + vocalized  +wordlist[endPos+1:]
	return wordlist;
if __name__ == '__main__':
	#import number as ArabicNumberToLetters
	texts=[u"مليونان وألفان وإثنا عشر", 
	u"جاء مليونان وألفان وإثنا عشر", 
	u"وجدت خمسمئة وثلاث وعشرون دينارا",
		u"خمسمئة وثلاث وعشرون دينارا",
	u"وجدت خمسمئة وثلاثة وعشرين دينارا فاشتريت ثلاثة عشر دفترا",
	u"لم أجد شيئا",
	u'من ثلائمئة وخمسين بلدا ',
		u'من ثلاثمئة وخمسين بلدا ',
	u'من أربعمئة وخمسين بلدا ',
	];
	for text in texts:
		# result = detectNumberWords(text);
		# print u";".join(result).encode('utf8');
		positions= detectNumberPhrasesPosition(araby.tokenize(text));
		print positions;
		phrases = extractNumberPhrases(text);
		print text.encode('utf8');
		print u'\t'.join(phrases).encode('utf8');