Пример #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
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
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
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
 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
				# 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');