Próbuję wyodrębnić tekst z dowolnych stron html. Niektóre strony (nad którymi nie mam kontroli) zniekształciły html lub skrypty, które to utrudniają. Również jestem na wspólnym środowisku hostingowym, więc mogę zainstalować dowolną bibliotekę python, ale nie mogę po prostu zainstalować niczego, co chcę na serwerze.Strategia Pythona do wyodrębniania tekstu ze zniekształconych stron HTML
pyparsing i html2text.py również nie działały na źle sformatowanych stronach html.
Przykład URL http://apnews.myway.com/article/20091015/D9BB7CGG1.html
Moja obecna implementacja jest w przybliżeniu następujący:
# Try using BeautifulSoup 3.0.7a
soup = BeautifulSoup.BeautifulSoup(s)
comments = soup.findAll(text=lambda text:isinstance(text,Comment))
[comment.extract() for comment in comments]
c=soup.findAll('script')
for i in c:
i.extract()
body = bsoup.body(text=True)
text = ''.join(body)
# if BeautifulSoup can't handle it,
# alter html by trying to find 1st instance of "<body" and replace everything prior to that, with "<html><head></head>"
# try beautifulsoup again with new html
jeśli BeautifulSoup nadal nie działa, a potem uciekać się do korzystania heurystyki patrzenia na 1st char, ostatni char (aby zobaczyć, czy wygląda na linię kodu # < i pobrać próbkę linii, a następnie sprawdzić, czy tokeny są angielskimi słowami lub liczbami. Jeśli dla kilku tokenów są słowa lub liczby, to myślę, że linia jest kodem:
Mogę wykorzystać uczenie maszynowe do sprawdzenia każdej linii, ale wydaje mi się to trochę kosztowne i prawdopodobnie musiałbym ją wyszkolić (ponieważ nie wiem zbyt wiele o maszynach uczących się bez nadzoru) i oczywiście również ją napisać.
Wszelkie rady, narzędzia, strategie byłyby mile widziane. Również zdaję sobie sprawę, że ta druga część jest raczej nieporządna, ponieważ jeśli dostanę linię, która jest określona, aby zawierać kod, obecnie wyrzucam całą linię, nawet jeśli w linii jest niewielka ilość faktycznego tekstu w języku angielskim.
Cóż, rozwiązanie niezawsze, historia wiadomości, z którą się łączyłeś, była świetna. Niektórzy ludzie, co? :) –
@Lesse, myślę, że są też zniekształceni ludzie. – Johnny4000