Проблема перевода Python TextBlob - PullRequest
2 голосов
/ 14 марта 2019

Я делаю консольное приложение для быстрого анализа настроений с Python, TextBlob и NLTK.

В настоящее время я использую ссылку на вики-статью на испанском языке, поэтому мне не нужно переводить ее, и я могу использовать список стоп-слов nltk на испанском, но что если я хочу, чтобы этот код работал для ссылок на разные языки?

Если я использую строку TextFinal=TextFinal.translate(to="es") ниже textFinal=TextBlob(texto) (код ниже), я получаю сообщение об ошибке, поскольку он не может перевести испанский на испанский.

Могу ли я предотвратить это, просто используя try / catch? Есть ли способ заставить код пытаться переводить на разные языки (а также использовать разные списки стоп-слов) в зависимости от языка ссылок, которые я передаю в приложение?

import nltk
nltk.download('stopwords')
from nltk import  word_tokenize
from nltk.corpus import stopwords
import string
from textblob import TextBlob, Word
import urllib.request
from bs4 import BeautifulSoup

response = urllib.request.urlopen('https://es.wikipedia.org/wiki/Valencia')
html = response.read()

soup = BeautifulSoup(html,'html5lib')
text = soup.get_text(strip = True)


tokens = word_tokenize(text)
tokens = [w.lower() for w in tokens]

table = str.maketrans('', '', string.punctuation)
stripped = [w.translate(table) for w in tokens]
words = [word for word in stripped if word.isalpha()]

stop_words = set(stopwords.words('spanish'))

words = [w for w in words if not w in stop_words]

with open('palabras.txt', 'w') as f:
    for word in words:
        f.write(" " + word)

with open('palabras.txt', 'r') as myfile:
    texto=myfile.read().replace('\n', '')


textFinal=TextBlob(texto)

print (textFinal.sentiment)

freq = nltk.FreqDist(words)

freq.plot(20, cumulative=False)

1 Ответ

1 голос
/ 14 марта 2019

Посмотрите на пакет langdetect.Вы можете проверить язык страницы, которую вы вводите, и пропустить перевод, если язык страницы соответствует языку перевода.Примерно так:

import string
import urllib.request

import nltk
from bs4 import BeautifulSoup
from langdetect import detect
from nltk import word_tokenize
from nltk.corpus import stopwords
from textblob import TextBlob, Word

nltk.download("stopwords")
# nltk.download("punkt")

response = urllib.request.urlopen("https://es.wikipedia.org/wiki/Valencia")
html = response.read()

soup = BeautifulSoup(html, "html5lib")
text = soup.get_text(strip=True)
lang = detect(text)

tokens = word_tokenize(text)
tokens = [w.lower() for w in tokens]

table = str.maketrans("", "", string.punctuation)
stripped = [w.translate(table) for w in tokens]
words = [word for word in stripped if word.isalpha()]

stop_words = set(stopwords.words("spanish"))

words = [w for w in words if w not in stop_words]

with open("palabras.txt", "w", encoding="utf-8") as f:
    for word in words:
        f.write(" " + word)

with open("palabras.txt", "r", encoding="utf-8") as myfile:
    texto = myfile.read().replace("\n", "")


textFinal = TextBlob(texto)

translate_to = "es"
if lang != translate_to:
    textFinal = textFinal.translate(to=translate_to)

print(textFinal.sentiment)

freq = nltk.FreqDist(words)

freq.plot(20, cumulative=False)
...