Определение языка текста на просканированном веб-сайте в Python - PullRequest
1 голос
/ 20 апреля 2020

Я написал несколько разных пауков для разных сайтов, которые выводят текст статей и URL-адреса. Пример:

import scrapy
import re
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from bs4 import BeautifulSoup

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


class FruehstueckSpider(scrapy.Spider):
    name = "fruestueckerinnen"

    def start_requests(self):
        urls = [
            'https://www.diefruehstueckerinnen.at/stadt/wien/',
        ]
        urls += [urls[0] + 'page/' + str(i) + '/' for i in range(1,17)]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        hrefs = response.css('div.text > a')
        yield from response.follow_all(hrefs, callback = self.parse_attr)

    def parse_attr(self, response):

        yield {
                'text': ' '.join([i for i  in word_tokenize(re.sub(pattern='[^a-zA-Z_\-ÖöÜüÄäßèé]',string=  BeautifulSoup(response.css('.content-inner.single-content').get(),"html.parser").find(class_="content-inner single-content").text , repl=' ')) if i not in stop_words and not re.match('[0-9]', i) and len(i) >1]),
                'url': response.request.url,
        }

Я хочу определить язык, на котором написан весь текст. Имеет ли смысл писать его под «text» и «url» как другое свойство? Я знаю, что есть функция с именем detect (*1004*), но как ее использовать в этом случае?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Вы можете добавить еще одно поле в поле вот так

from langdetect import detect  # add this to your import


# change the parse_attr function like this
def parse_attr(self, response):
    text = ' '.join([i for i  in word_tokenize(re.sub(pattern='[^a-zA-Z_\-ÖöÜüÄäßèé]',string=  BeautifulSoup(response.css('.content-inner.single-content').get(),"html.parser").find(class_="content-inner single-content").text , repl=' ')) if i not in stop_words and not re.match('[0-9]', i) and len(i) >1])
    language = detect(text)

    yield {
            'text': text,
            'language': language,
            'url': response.request.url,
    }
0 голосов
/ 20 апреля 2020

Атрибут "lang" html, который должен определять язык страницы. Я предлагаю вам использовать это как ссылку для сайта, потому что это самый прямой способ распознать этот атрибут. Этот атрибут был определен, чтобы помочь, например, голосовой программе выбрать правильный язык для произношения.

 <html lang="en">
...
</html>

Добавление языка к выводу - дело вкуса. Это не больно, но тебе это действительно нужно? Вы всегда можете включить, но не использовать это значение везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...