from __future__ import print_function
from textblob import TextBlob

"""
Explanation: textblob: otro módulo para tareas de PLN (NLTK + pattern)
textblob es una librería de procesamiento del texto para Python que permite realizar tareas de Procesamiento del Lenguaje Natural como análisis morfológico, extracción de entidades, análisis de opinión, traducción automática, etc. 
Está construida sobre otras dos librerías muy famosas de Python: NLTK y pattern. La principal ventaja de textblob es que permite combinar el uso de las dos herramientas anteriores en un interfaz más simple.
Vamos a apoyarnos en este tutorial para aprender a utilizar algunas de sus funcionalidades más llamativas. 
Lo primero es importar el objeto TextBlob que nos permite acceder a todas las herramentas que incluye.
End of explanation
"""


texto = '''In new lawsuits brought against the ride-sharing companies Uber and Lyft, the top prosecutors in Los Angeles 
and San Francisco counties make an important point about the lightly regulated sharing economy. The consumers who 
participate deserve a  very clear picture of the risks they're taking'''
t = TextBlob(texto)

print('Tenemos', len(t.sentences), 'oraciones.\n')

for sentence in t.sentences:
    print(sentence)
    print('-' * 75)

"""
Explanation: Vamos a crear nuestro primer ejemplo de textblob a través del objeto TextBlob. Piensa en estos textblobs como una especie de cadenas de texto de Python, analaizadas y enriquecidas con algunas características extra.
End of explanation
"""


# imprimimos las oraciones
for sentence in t.sentences:
    print(sentence)
    print('-' * 75)
    
# y las palabras    
print(t.words)
print(texto.split())

"""
Explanation: Procesando oraciones, palabras y entidades
Podemos segmentar en oraciones y en palabras nuestra texto de ejemplo simplemente accediendo a las propiedades .sentences y .words. Imprimimos por pantalla:
End of explanation
"""


print("el texto de ejemplo contiene", len(t.noun_phrases), "entidades")
for element in t.noun_phrases:
    print("-", element)

# jugando con lemas, singulares y plurales 
for word in t.words:
    if word.endswith("s"):
        print(word.lemmatize(), word, word.singularize())
    else:
        print(word.lemmatize(), word, word.pluralize())

# ¿cómo podemos hacer la lematización más inteligente?


"""
Explanation: La propiedad .noun_phrases nos permite acceder a la lista de entidades (en realidad, son sintagmas nominales) incluídos en nuestro textblob. Así es como funciona.
End of explanation
"""


# análisis sintáctico
print(t.parse())

"""
Explanation: Análisis sintático
Aunque podemos utilizar otros analizadores, por defecto el método .parse() invoca al analizador morfosintáctico del módulo  pattern.en que ya conoces.
End of explanation
"""


# de chino a inglés y español 
oracion_zh = u"中国探月工程 亦稱嫦娥工程，是中国启动的第一个探月工程，于2003年3月1日正式启动"
t_zh = TextBlob(oracion_zh)
print(t_zh.translate(from_lang="zh-CN", to="en"))
print(t_zh.translate(from_lang="zh-CN", to="es"))

print("--------------")

t_es = TextBlob(u"La deuda pública ha marcado nuevos récords en España en el tercer trimestre")
print(t_es.translate(to="el"))
print(t_es.translate(to="ru"))
print(t_es.translate(to="eu"))
print(t_es.translate(to="fi"))
print(t_es.translate(to="fr"))
print(t_es.translate(to="nl"))
print(t_es.translate(to="gl"))
print(t_es.translate(to="ca"))
print(t_es.translate(to="zh"))
print(t_es.translate(to="la"))

# con el slang no funciona tan bien
print("--------------")
t_ita = TextBlob(u"Sono andato a Milano e mi sono divertito un bordello.")
print(t_ita.translate(to="en"))
print(t_ita.translate(to="es"))

"""
Explanation: Traducción automática
A partir de cualquier texto procesado con TextBlob, podemos acceder a un traductor automático de bastante calidad con el método .translate. Fíjate en cómo lo usamos. Es obligatorio indicar la lengua de destinto. La lengua de origen, se puede predecir a partir del texto de entrada.
End of explanation
"""


# WordNet
from textblob import Word
from textblob.wordnet import VERB

# ¿cuántos synsets tiene "car"
word = Word("car")
print(word.synsets)

# dame los synsets de la palabra "hack" como verbo
print(Word("hack").get_synsets(pos=VERB))

# imprime la lista de definiciones de "car"
print(Word("car").definitions)

# recorre la jerarquía de hiperónimos
for s in word.synsets:
    print(s.hypernym_paths())

"""
Explanation: WordNet
textblob, más concretamente, cualquier objeto de la clase Word, nos permite acceder a la información de WordNet.
End of explanation
"""


# análisis de opinión
opinion1 = TextBlob("This new restaurant is great. I had so much fun!! :-P")
print(opinion1.sentiment)

opinion2 = TextBlob("Google News to close in Spain.")
print(opinion2.sentiment)


print(opinion1.sentiment.polarity)

if opinion1.sentiment.subjectivity > 0.5:
    print("Hey, esto es una opinion")

m = TextBlob("This is fucking awesome!! :-(")
print(m.sentiment)

"""
Explanation: Análisis de opinion
End of explanation
"""


#  corrección ortográfica
b1 = TextBlob("I havv goood speling!")
print(b1.correct())

b2 = TextBlob("Miy naem iz Jonh!")
print(b2.correct())

b3 = TextBlob("Boyz dont cri")
print(b3.correct())

b4 = TextBlob("psicological posesion achifmen comitment")
print(b4.correct())

"""
Explanation: Otras curiosidades
End of explanation
"""


