Parsing forum posts with python3 and beautiful soup - python

I need to get the text from the forum posts.
The site is this one:
http://forum.pcekspert.com/showthread.php?t=263544
I tried to do it like this:
import requests
from bs4 import BeautifulSoup
# Create a variable with the url
url = 'http://forum.pcekspert.com/showthread.php?t=263544'
# Use requests to get the contents
r = requests.get(url)
# Get the text of the contents
html_content = r.text
# Convert the html content into a beautiful soup object
soup = BeautifulSoup(html_content,"lxml")
rez = soup.find_all('id=\"__xclaimwords_wrapper\"')
print(rez)
From the html of the file I found out that the post message is in two tags.
TEXT
the xxx in the first id is a number with 7 digits and every post message has a different one.

You can use a css select to find the dic with the __xclaimwords_wrapper ids and pull the text from that, that is where the message text is:
soup = BeautifulSoup(html_content,"lxml")
rez = [d.text for d in soup.select("#__xclaimwords_wrapper")]
Outout:
['Izgleda da novi update za 8 pod nazivom Threshold ce zapravo biti win9.. pa ako nekoga zanima više malo evo vam linka : http://www.pcgamer.com/2014/01/20/wi...ame=0&ns_fee=0\r\ni malo opsirnije o threshold-u http://winsupersite.com/windows-8/th...hip-april-2015', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Sneaky\n\n\nIzgleda da novi update za 8 pod nazivom Threshold ce zapravo biti win9.. pa ako nekoga zanima više malo evo vam linka : http://www.pcgamer.com/2014/01/20/wi...ame=0&ns_fee=0\r\ni malo opsirnije o threshold-u http://winsupersite.com/windows-8/th...hip-april-2015\n\n\n\nIzgleda da su prihvatili logiku Appla i da stancaju verzije i malo po malo "cokaju", nekako mi se cini logicnije nego svako 5 g izbacivat op OS koji u danasnem svitu androida/iosa/wpa teze prolazi naplatu. Nije da su direktno usporedivi, ali ljudi su drski pa je tesko odvojit vece pare za OS.', 'Ja bi prije rekao da su shvatili da su malo zaj* za Win8, pa da isprave stetu - lakse je izbaciti novu verziju.\nSlicno kao i sa Vistom.', 'Tocno to. Win8 (8.1) je meni osobno isto kao i WinME i Vista. U biti MS napravi svaku drugu generaciju Winsa kvalitetno jer popravlja prethodnu koju za*ere maksimalno sa novim features-ima ', 'Nek oni meni samo refreshaju izgled desktopa sa novim ikonama, explorer elementima i animacijama i ja sam zadovoljan \n\nI da, još bolju cloud i WP9 integraciju.', 'Da, fakat je idiocki izbacivat Service packove, kad možeš pičiti nove OS-ove \n\nKako ono beše:\nWin 2000 - SP4\nWin XP - SP3\nVista - SP2\nWin 7 - SP1\nWin 8 - Win 8.1 ', 'meni više smeta to što još nisu uveli novi filesystem koji se mislim da još od viste obećava, a ne nekakve vizualne gluposti', 'nije se nista obecavalo od viste\r\nono sto je bio WinFS nije bio novi FS nego NTFS + "layer" baze podataka koja je vukla metadata iz fajlova\n\r\nmozes si to sranje i instalirat na xp-u (beta 1) pa vidjet sta je to\n\r\nu svakom slucaju ja preskacem i win9\r\nsumnjam da ce ista novog pridonjeti ako ne i jos gore cim pocne sve vise integracija sranja koje nitko normalan netreba\n\r\nako se nevaram win8 ima strgani nacin loginova (slagalica, face reckognition), nebi se cudio da 9-tka bude samo profinjenija 8-ica\r\nsa popravljenim tim stvarima\r\ncak bi i ReFS mogao vidjeti svjetlost posto ga samo nude na serverima kao test\n\r\nali to su samo minarne stvari, to mene ne zanima :P\r\nak ce jasit i dalje metro sranja i tviter i assbook integracije i bing pizd***e\r\nonda ostajem na 7-ici ', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Drug Brko\n\n\nWin 2000 - SP4\n\n\n\nSa zadnjim rollupom, skoro 5, ali uzmi da je NT 4 imao 6+1 komada, tako da ti je tablica dobra. ', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Bubba\n\n\nSa zadnjim rollupom, skoro 5, ali uzmi da je NT 4 imao 6+1 komada, tako da ti je tablica dobra. \n\n\n\nMa znam da je bio rollup za win2000, sjećam se da sam 2005 slipstreamao cd sa tim updateom, al nije SP. \nXP SP3 nakon instalacije OS-a ima još oko 1GB updateova sa neta, Win 7 isto. Vjerojatno i vista \nSad će bit za win 8.1 bit 100 MB i odma će doći win 9 ', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Drug Brko\n\n\nMa znam da je bio rollup za win2000, sjećam se da sam 2005 slipstreamao cd sa tim updateom, al nije SP.\n\n\n\nnije SP jer oni nisu htjeli da bude SP\r\njer kad izbace SP onda moraju produljiti rok podrske OS-a\n\r\nzato XP i nece imati SP4 iako ima tonu patcheva nakon SP3-a\r\nkao sto i vista nece dobit SP3 a win "7" SP2\n\r\nsvaki SP ih kosta minimalno novih 3 godina podrske sto se neuklapa u njihovu ideju\r\nsvake 2 godine novi OS\n\r\nzasto bi davali besplatne SP-ove kad mogu u istom roku naplacivati novi OS', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Baja 001\n\n\nIzgleda da su prihvatili logiku Appla i da stancaju verzije i malo po malo "cokaju", nekako mi se cini logicnije nego svako 5 g izbacivat op OS koji u danasnem svitu androida/iosa/wpa teze prolazi naplatu. Nije da su direktno usporedivi, ali ljudi su drski pa je tesko odvojit vece pare za OS.\n\n\n\nS druge strane, Appleovi updateovi se više ne naplaćuju. Prvo su smanjili cijenu, a 10.9 je besplatan. Dovoljno je kupit hardware.', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor IcyTexx\n\n\nS druge strane, Appleovi updateovi se više ne naplaćuju. Prvo su smanjili cijenu, a 10.9 je besplatan. Dovoljno je kupit hardware.\n\n\n\nNaplati se kroz hw, ali svakako idu na taj mobilni trend izbacivanja.', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor IcyTexx\n\n\nS druge strane, Appleovi updateovi se više ne naplaćuju. Prvo su smanjili cijenu, a 10.9 je besplatan. Dovoljno je kupit hardware.\n\n\n\nS druge strane appleovi updateovi su smeće. To ti kažem s punom odgovornošću kao dugogodišnji profesionalni korisnik (FCP7 itd.). Trenutno imamo predzadnju generaciju njihovih Mac Pro 6 jezgrenih đubradi i nakon upgrejda na Mavericse sve je ošlo u tri pm. Popis je predugačak...a imaš dovoljno o tome i na netu.\n\n\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Baja 001\n\n\nNaplati se kroz hw, ali svakako idu na taj mobilni trend izbacivanja.\n\n\n\nTako je. Dovoljno je baciti oko na cjenik.', 'Zato kažem dovoljno je kupit hardware... U Americi su im laptopi pojeftinili. Kad ću ići sad u 5. mj u Ameriku opet ću kupit jednog jer sam im voljan dati taj price premium. Prije dvije godine sam im dao više radi kvalitete izrade, a kroz korištenje sad bi im dao više radi OS-a. Vise ne naplaćuju ni svoj "Office" software. Gledao sam i u PC svijetu ne mogu naći zamjenu njihovom 15" MBP Retina. Barem po mojim kriterijima. Ako netko nadje "retina" laptop od 15" koji je jednako debeo kao i MBPR, da je metalan, a ne plastican, sa mu jednako ili duže traje baterija, istih ili jačih specifikacija sa PCIE storageom za iste ili manje pare skidam mu kapu. A od Windowsovih DPI postavki mi bude zlo.\n\nS druge strane, Windows 8 kosta $120. A on je cvijeće, ha? Osnovni Office $130. Evo čekam u redu da im iskeširam pare...\n\nNo neću sad ulazit u to budući da je ovo MS tema, samo ce se krenut ljutit ljudi.\n\n#gnujko vjerujem ti, mene nije zahvatilo bas puno problema kod Mavericksa, a isto nisam "običan" korisnik. Budem pogledao o kakvim se problemima tu radi.', 'moguce je da windows 8.2 ne bude 8.2 nego windows 9\nali nadam se da ce poboljsat i destop i metro u isto vrijeme jer dosta stvari koje na destopu imas nema u metrou sto bi stvarno koristilo pogotovo samo za RT verziju kao npr explorer\n\nali budemo vidjeli, brat mi je bio na mvp summitu i nisu puno govorili o novim windowsima', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Metlina\n\n\ni nisu puno govorili o novim windowsima\n\n\n\nzato sto ih jos nisu ni poceli "raditi"\r\nsad se jos uvjek fokusiraju na ovo: http://wzascok.livejournal.com/12774.html', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor Metlina\n\n\nmoguce je da windows 8.2 ne bude 8.2 nego windows 9\nali nadam se da ce poboljsat i destop i metro u isto vrijeme jer dosta stvari koje na destopu imas nema u metrou sto bi stvarno koristilo pogotovo samo za RT verziju kao npr explorer\n\nali budemo vidjeli, brat mi je bio na mvp summitu i nisu puno govorili o novim windowsima\n\n\n\n100% ne bude bilo Win8.2, ide se na Threshold (Windows 9).\n\nImaš Metro verziju File Managera, SkyDrive (OneDrive).\n\nMVP-ovi su pod NDA pa nit ne smiju pričati o takvim stvarima \n\nEDIT: I Threshold je počeo sa developmentom.', 'http://youtu.be/VF4Eva_4UNE', '\n\r\nnije 9 nego 10 \n\r\nslike i tekst http://thenextweb.com/microsoft/2014...es-windows-10/\n\r\nstižu sredinom 2015.', 'Jednostavno smo priznali da smo zajebali ', 'Tema bi se trebala preimenovat u Windows 10 ', '\n\n\n\n\nvolio bih zamijeniti sedmicu, vidjet ćemo sada hoću li ', 'Odlicno, taman dovoljno dugo dok ne izguram ove w7 sa zaobilazenjem w8 \n\n90-tih sam furo windows 3.1 pa nesto jako malo W95 a koristio W98, WNT tj. W2000 smo isto zaobisli pa WXP, SP1 i SP2 a SP3 i W Vistu isto debelo zaobisao. \n\nMislim da mi je windows vista najgore legla od svih ti windowsa.\nE sad ostaje nada da ce ovi w10 biti na razini w7...', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor mamutarka\n\n\nhttp://youtu.be/VF4Eva_4UNE\n\n\n\nNe kuzim, kao, ovo je neki "novi" super feature?\n\r\nOpen/CreateWindowsStation() i Create/SwitchDesktop() su funkcije podrzane u Windows API-ju jos od Windowsa 2000, dakle, cijelih 14 godina, rekli bi smo - old news.\n\r\nDrugim rijecima, svaki nemusti programer je mogao napraviti ovo bez nekih vecih problema i poteskoca, sto i jesu radili jer ovakvi programcici postoje "oduvijek".\n\r\nNadam se da ipak imaju u planu neki novi ozbiljniji feature, tipa WinFS ili stogod drugo, jer ovo je smijesno i za pokazivati, a kamo li stavljati kao novi ficur novih Windowsa... :\\', 'http://youtu.be/84NI5fjTfpQ', 'http://blogs.windows.com/bloggingwin...ng-windows-10/', 'mergao dvije teme, windows 9 i windows 10 u jednu...\nOvdje će izaći tech preview:\nhttp://windows.microsoft.com/hr-hr/w...ew-coming-soon', 'Čim vidim ono tablet sučelje, imam osjećaj da neću mjenjat sedmicu još ohoho', '\nCitiraj:\n\n\n\n\r\n\t\t\t\t\tAutor ivan77\n\n\nČim vidim ono tablet sučelje, imam osjećaj da neću mjenjat sedmicu još ohoho\n\n\n\nBezveze si skeptičan, meni se na kraju i svidio metro. Pogotovo što imaš aplikacije iz store-a koje su prilično zanimljive, od nogometnih rezultata preko tečajne liste do aplikacije koja streama svjetske televizije tipa BBC bez da ti treba proxy, hola i slično.']
Which matches what you see on the page.

Related

Identify the names of the interlocutors (most frequent words that follow a certain pattern) to separate the dialog lines of a chat using regex

import re
#To read input data file
with open("dm_chat_data.txt") as input_data_file:
print(input_data_file.read())
#To write corrections in a new text file
with open('dm_chat_data_fixed.txt', 'w') as file:
file.write('\n')
This is the text file extracted by webscraping, but the lines of the dialogs of each of its chat partners are not separated, so the program must identify when each user starts the dialog.
File dm_chat_data.txt
Desempleada_19: HolaaLucyGirl: hola como estas?Desempleada_19: Masomenos y vos LucyGirl?Desempleada_19: Q edad tenes LucyGirl: tengo 19LucyGirl: masomenos? que paso? (si se puede preguntar claro)Desempleada_19: Yo tmb 19 me llamo PriscilaDesempleada_19: Desempleada_19: Q hacías LucyGirl: Entre al chat para ver que onda, no frecuento mucho
Charge file [100%] (ddddfdfdfd)
LucyGirl: Desempleada_19: Gracias!
AndrewSC: HolaAndrewSC: Si quieres podemos hablar LyraStar: claro LyraStar: que cuentas amigaAndrewSC: Todo bien y tú?
Charge file [100%] (ddddfdfdfd)
LyraStar: LyraStar: que tal ese auto?AndrewSC: Creo que...Diria que... ya son las 19 : 00 hs AndrewSC: Muy bien la verdad
Bsco_Pra_Cap_: HolaBsco_Pra_Cap_: como vaBsco_Pra_Cap_: Jorge, 47, de Floresta, me presento a la entrevista, vos?Bsco_Pra_Cap_: es aqui, cierto?LucyFlame: holaaLucyFlame: estas?LucyFlame: soy una programadora de la ciudad de HudsonBsco_Pra_Cap_: de Hudson centro? o hudson alejado...?Bsco_Pra_Cap_: contame, Lu, que buscas en esta organizacion?
And this is the file that you must create separating the dialogues of each interlocutor in each of the chats. The file edited_dm_chat_data.txt need to be like this...
Desempleada_19: Holaa
LucyGirl: hola como estas?
Desempleada_19: Masomenos y vos LucyGirl?
Desempleada_19: Q edad tenes
LucyGirl: tengo 19
LucyGirl: masomenos? que paso? (si se puede preguntar claro)
Desempleada_19: Yo tmb 19 me llamo Priscila
Desempleada_19:
Desempleada_19: Q hacías
LucyGirl: Entre al chat para ver que onda, no frecuento mucho
Charge file [100%] (ddddfdfdfd)
LucyGirl:
Desempleada_19: Gracias!
AndrewSC: Hola
AndrewSC: Si quieres podemos hablar
LyraStar: claro
LyraStar: que cuentas amiga
AndrewSC: Todo bien y tú?
Charge file [100%] (ddddfdfdfd)
LyraStar: LyraStar: que tal ese auto?
AndrewSC: Creo que...Diria que... ya son las 19 : 00 hs
AndrewSC: Muy bien la verdad
Bsco_Pra_Cap_: Hola
Bsco_Pra_Cap_: como va
Bsco_Pra_Cap_: Jorge, 47, de Floresta, me presento a la entrevista, vos?Bsco_Pra_Cap_: es aqui, cierto?
LucyFlame: holaa
LucyFlame: estas?
LucyFlame: soy una programadora de la ciudad de Hudson
Bsco_Pra_Cap_: de Hudson centro? o hudson alejado...?
Bsco_Pra_Cap_: contame, Lu, que buscas en esta organizacion?
I have tried to use regex, where each interlocutor is represented by a "Word" that begins in uppercase immediately followed by ": "
But there are some lines that give some problems to this logic, for example "Bsco_Pra_Cap_: HolaBsco_Pra_Cap_: como va", where the substring "Hola" is a simply word that is not a name and is attached to the name with capital letters, then it would be confused and consider "HolaBsco_Pra_Cap_: " as a name, but it's incorrect because the correct users name is "Bsco_Pra_Cap_: "
This problem arises because we don't know what the nicknames of the interlocutor users will be, and... the only thing we know is the structure where they start with a capital letter and end in : and then an empty space, but one thing I've noticed is that in all chats the names of the conversation partners are the most repeated words, so I think I could use a regular expression pattern as a word frequency counter by setting a search criteria like this "[INITIAL CAPITAL LETTER] hjasahshjas: " , and put as line separators those substrings with these characteristics as long as they are the ones that are repeated the most throughout the file
input_data_file = open("dm_chat_data.txt", "r+")
#maybe you can use something like this to count the occurrences and thus identify the nicknames
input_data_file.count(r"[A-Z][^A-Z]*:\s")
I think it is quite hard. but you can build a rules as shown in below code:
import nltk
from collections import Counter
text = '''Desempleada_19: HolaaLucyGirl: hola como estas?Desempleada_19:
Masomenos y vos LucyGirl?Desempleada_19: Q edad tenes LucyGirl: tengo
19LucyGirl: masomenos? que paso? (si se puede preguntar claro)Desempleada_19: Yo
tmb 19 me llamo PriscilaDesempleada_19: Desempleada_19: Q hacías LucyGirl: Entre
al chat para ver que onda, no frecuento mucho
Charge file [100%] (ddddfdfdfd)
LucyGirl: Desempleada_19: Gracias!
AndrewSC: HolaAndrewSC: Si quieres podemos hablar LyraStar: claro LyraStar: que
cuentas amigaAndrewSC: Todo bien y tú?
Charge file [100%] (ddddfdfdfd)
LyraStar: LyraStar: que tal ese auto?AndrewSC: Creo que...Diria que... ya son
las 19 : 00 hs AndrewSC: Muy bien la verdad
Bsco_Pra_Cap_: HolaBsco_Pra_Cap_: como vaBsco_Pra_Cap_: Jorge, 47, de Floresta,
me presento a la entrevista, vos?Bsco_Pra_Cap_: es aqui, cierto?LucyFlame:
holaaLucyFlame: estas?LucyFlame: soy una programadora de la ciudad de
HudsonBsco_Pra_Cap_: de Hudson centro? o hudson alejado...?Bsco_Pra_Cap_:
contame, Lu, que buscas en esta organizacion?
'''
data = nltk.word_tokenize(text)
user_lst = []
for ind, val in enumerate(data):
if val == ':':
user_lst.append(data[ind - 1])
# printing duplicates assuming the users were speaking more than one time. if a
user has one dialog box it fails.
users = [k for k, v in Counter(user_lst).items() if v > 1]
# function to replace a string:
def replacer(string, lst):
for v in lst:
string = string.replace(v, f' {v}')
return string
# replace users in old text with single space in it.
refined_text = replacer(text, users)
refined_data = nltk.word_tokenize(refined_text)
correct_users = []
dialog = []
for ind, val in enumerate(refined_data):
if val == ':':
correct_users.append(refined_data[ind - 1])
if val not in users:
dialog.append(val)
correct_dialog = ' '.join(dialog).replace(':', '<:').split('<')
strip_dialog = [i.strip() for i in correct_dialog if i.strip()]
chat = []
for i in range(len(correct_users)):
chat.append(f'{correct_users[i]}{strip_dialog[i]}')
print(chat)
>>>> ['Desempleada_19: Holaa', 'LucyGirl: hola como estas ?', 'Desempleada_19: Masomenos y vos ?', 'Desempleada_19: Q edad tenes', 'LucyGirl: tengo 19', 'LucyGirl: masomenos ? que paso ? ( si se puede preguntar claro )', 'Desempleada_19: Yo tmb 19 me llamo Priscila', 'Desempleada_19:', 'Desempleada_19: Q hacías', 'LucyGirl: Entre al chat para ver que onda , no frecuento mucho Charge file [ 100 % ] ( ddddfdfdfd )', 'LucyGirl:', 'Desempleada_19: Gracias !', 'AndrewSC: Hola', 'AndrewSC: Si quieres podemos hablar', 'LyraStar: claro', 'LyraStar: que cuentas amiga', 'AndrewSC: Todo bien y tú ? Charge file [ 100 % ] ( ddddfdfdfd )', 'LyraStar:', 'LyraStar: que tal ese auto ?', 'AndrewSC: Creo que ... Diria que ... ya son las 19', '19: 00 hs', 'AndrewSC: Muy bien la verdad', 'Bsco_Pra_Cap_: Hola', 'Bsco_Pra_Cap_: como va', 'Bsco_Pra_Cap_: Jorge , 47 , de Floresta , me presento a la entrevista , vos ?', 'Bsco_Pra_Cap_: es aqui , cierto ?', 'LucyFlame: holaa', 'LucyFlame: estas ?', 'LucyFlame: soy una programadora de la ciudad de Hudson', 'Bsco_Pra_Cap_: de Hudson centro ? o hudson alejado ... ?', 'Bsco_Pra_Cap_: contame , Lu , que buscas en esta organizacion ?']

Any way to dynamically insert linebreaks depending on the length of the string?

I receive some data in one long string from my endpoint, and depending on the length of the string I'd like to split it up into paragraphs on the frontend.
One string might look like this:
"*1* No princípio Deus criou os céus e a terra.*2* Era a terra sem forma e vazia; trevas cobriam a face do abismo, e o Espírito de Deus se movia sobre a face das águas.*3* Disse Deus: \"Haja luz\", e houve luz.*4* Deus viu que a luz era boa, e separou a luz das trevas.*5* Deus chamou à luz dia, e às trevas chamou noite. Passaram-se a tarde e a manhã; esse foi o primeiro dia.*6* Depois disse Deus: \"Haja entre as águas um firmamento que separe águas de águas\".*7* Então Deus fez o firmamento e separou as águas que estavam embaixo do firmamento das que estavam por cima. E assim foi.*8* Ao firmamento Deus chamou céu. Passaram-se a tarde e a manhã; esse foi o segundo dia.*9* E disse Deus: \"Ajuntem-se num só lugar as águas que estão debaixo do céu, e apareça a parte seca\". E assim foi.*10* À parte seca Deus chamou terra, e chamou mares ao conjunto das águas. E Deus viu que ficou bom.*11* Então disse Deus: \"Cubra-se a terra de vegetação: plantas que dêem sementes e árvores cujos frutos produzam sementes de acordo com as suas espécies\". E assim foi.*12* A terra fez brotar a vegetação: plantas que dão sementes de acordo com as suas espécies, e árvores cujos frutos produzem sementes de acordo com as suas espécies. E Deus viu que ficou bom.*13* Passaram-se a tarde e a manhã; esse foi o terceiro dia.*14* Disse Deus: \"Haja luminares no firmamento do céu para separar o dia da noite. Sirvam eles de sinais para marcar estações, dias e anos,*15* e sirvam de luminares no firmamento do céu para iluminar a terra\". E assim foi.*16* Deus fez os dois grandes luminares: o maior para governar o dia e o menor para governar a noite; fez também as estrelas.*17* Deus os colocou no firmamento do céu para iluminar a terra,*18* governar o dia e a noite, e separar a luz das trevas. E Deus viu que ficou bom.*19* Passaram-se a tarde e a manhã; esse foi o quarto dia.*20* Disse também Deus: \"Encham-se as águas de seres vivos, e sobre a terra voem aves sob o firmamento do céu\".*21* Assim Deus criou os grandes animais aquáticos e os demais seres vivos que povoam as águas, de acordo com as suas espécies; e todas as aves, de acordo com as suas espécies. E Deus viu que ficou bom.*22* Então Deus os abençoou, dizendo: \"Sejam férteis e multipliquem-se! Encham as águas dos mares! E multipliquem-se as aves na terra\".*23* Passaram-se a tarde e a manhã; esse foi o quinto dia.*24* E disse Deus: \"Produza a terra seres vivos de acordo com as suas espécies: rebanhos domésticos, animais selvagens e os demais seres vivos da terra, cada um de acordo com a sua espécie\". E assim foi.*25* Deus fez os animais selvagens de acordo com as suas espécies, os rebanhos domésticos de acordo com as suas espécies, e os demais seres vivos da terra de acordo com as suas espécies. E Deus viu que ficou bom.*26* Então disse Deus: \"Façamos o homem à nossa imagem, conforme a nossa semelhança. Domine ele sobre os peixes do mar, sobre as aves do céu, sobre os animais grandes de toda a terra e sobre todos os pequenos animais que se movem rente ao chão\".*27* Criou Deus o homem à sua imagem, à imagem de Deus o criou; homem e mulher os criou.*28* Deus os abençoou, e lhes disse: \"Sejam férteis e multipliquem-se! Encham e subjuguem a terra! Dominem sobre os peixes do mar, sobre as aves do céu e sobre todos os animais que se movem pela terra\".*29* Disse Deus: \"Eis que lhes dou todas as plantas que nascem em toda a terra e produzem sementes, e todas as árvores que dão frutos com sementes. Elas servirão de alimento para vocês.*30* E dou todos os vegetais como alimento a tudo o que tem em si fôlego de vida: a todos os grandes animais da terra, a todas as aves do céu e a todas as criaturas que se movem rente ao chão\". E assim foi.*31* E Deus viu tudo o que havia feito, e tudo havia ficado muito bom. Passaram-se a tarde e a manhã; esse foi o sexto dia.",
Whereas another string is way shorter:
"*1* Assim foram concluídos os céus e a terra, e tudo o que neles há.*2* No sétimo dia Deus já havia concluído a obra que realizara, e nesse dia descansou.
Obviously, the second string wouldn't need any splitting up seeing as it only has two "sections" (notice the *1* and *2* , but the first one goes from *1* all the way up to *29*
Not exactly sure what kind of logic I'm after, but maybe something along the lines of
For every *10*th section, add a linebreak evenly across the entire string.
Not exactly sure what kind of logic I'm after
Take loot at textwrap.fill function from built-in module textwrap. Most basic usage is providing text and giving width, for example
import textwrap
text = "Some very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long text"
text_with_breaks = textwrap.fill(text, 50)
print(text_with_breaks)
output
Some very very very very very very very very very
very very very very very very very very very very
very very very very very very very very very very
very very very long text
But it does have also many options which you can tweak, see textwrap.TextWrapper docs.
A good starting point might be using regular expressions.
The following method assumes that every section begins with the pattern "*integer* " and each section does not contain this pattern as content.
import re
# your long string
string = ""
# regular expression
pattern = "(\*\d+\* .+?)(?=\*\d+\*|$)"
# using the regular expression to find all sections
sections = re.findall(pattern, string)
# now you can loop over all sections like
for section in sections:
pass
# and let the fronted handle the display

Python Tokenizer, sentence gets cut off at newline character

I am trying to build a tokenizer with python, I think it is going on pretty well but there is one problem that I cannot seem to solve. I'll try to be as elaborative as possible:
This is the text I am trying to tokenize (txt.gz file):
"Het Franse danceduo Daft Punk hangt hun kenmerkende helmen aan de wilgen .
De dance-act stopt er na 28 jaar mee .
In een bijna acht minuten durende video kondigde het tweetal het afscheid aan .
Een woordvoerder heeft het nieuws aan entertainmentblad Variety bevestigd , maar wilde verder niet uitweiden over de reden van het stoppen .
In de video die vanochtend online kwam zijn Thomas Bangalter en Guy-Manuel de Homem-Christo met hun helmen te zien .
In de bijna dertig jaar dat ze actief waren , hebben ze lange tijd hun identiteit geheim weten te houden .
De twee staan tegenover elkaar en lopen vervolgens uit elkaar terwijl een onheilspellende wind klinkt .
And this is the output I am getting:
" Het Franse danceduo Daft Punk hangt hun kenmerkende helmen aan de wilgen .
dance-act stopt er na 28 jaar mee .
kondigde het tweetal het afscheid aan .
reden van het stoppen .
Homem-Christo met hun helmen te zien .
waren , hebben ze lange tijd hun identiteit geheim weten te houden .
onheilspellende wind klinkt "
This is my code:
import sys
import re
import gzip
def tokenizer(data):
tokens = re.compile('[^ ].*?[.!?]')
list_of_tokens = tokens.findall(data)
print(list_of_tokens)
string_token = ""
string_token = string_token.join(list_of_tokens)
string_token = re.sub('([.,!?()])', r' \1 ', string_token)
return string_token
def main(argv):
with gzip.open(argv[1], 'rt') as f:
data = f.read()
print(tokenizer(data))
if __name__ == '__main__':
main(sys.argv)

How to convert a list of sentences in a single text?

I have an list of sentences like this:
['Circula hoje o caderno especial "Folha Rock". Ele traz todas as informações para quem vai ao
M2.000 Summer Concerts, que começa hoje, e ao Hollywood Rock, a partir do dia 14. Mais de 30
bandas se apresentam nos dois festivais. O reggae domina a primeira noite do M2.000.',
'O delegado Nélson Guimarães, que apura a morte do sindicalista Oswaldo Cruz Júnior, não descarta
"motivações políticas" para o crime. O enterro foi marcado pela disputa da sucessão. Um grupo
apoiou o irmão de Oswaldo. Outro quer Cícero Bezerra da Silva, ligado a José Benedito de Souza,
suspeito do crime que está foragido. Brasil']
And i need that list like this:
['Circula hoje o caderno especial "Folha Rock". Ele traz todas as informações para quem vai ao
M2.000 Summer Concerts, que começa hoje, e ao Hollywood Rock, a partir do dia 14. Mais de 30
bandas se apresentam nos dois festivais. O reggae domina a primeira noite do M2.000.
O delegado Nélson Guimarães, que apura a morte do sindicalista Oswaldo Cruz Júnior, não descarta
"motivações políticas" para o crime. O enterro foi marcado pela disputa da sucessão. Um grupo
apoiou o irmão de Oswaldo. Outro quer Cícero Bezerra da Silva, ligado a José Benedito de Souza,
suspeito do crime que está foragido. Brasil']
You want to convert all elements of a list into a single string right ?
This might help you.
it will give you a single string variable
yourlist = ['Circula hoje o caderno especial "Folha Rock". Ele traz todas as informações para quem vai ao M2.000 Summer Concerts, que começa hoje, e ao Hollywood Rock, a partir do dia 14. Mais de 30 bandas se apresentam nos dois festivais. O reggae domina a primeira noite do M2.000.',
'O delegado Nélson Guimarães, que apura a morte do sindicalista Oswaldo Cruz Júnior, não descarta"motivações políticas" para o crime. O enterro foi marcado pela disputa da sucessão. Um grupo apoiou o irmão de Oswaldo. Outro quer Cícero Bezerra da Silva, ligado a José Benedito de Souza, suspeito do crime que está foragido. Brasil']
str = ""
for x in yourlist:
str = str + x
print(str)
you can do
yourlistname = ['Circula hoje o caderno especial "Folha Rock". Ele traz todas as informações para quem vai ao
M2.000 Summer Concerts, que começa hoje, e ao Hollywood Rock, a partir do dia 14. Mais de 30
bandas se apresentam nos dois festivais. O reggae domina a primeira noite do M2.000.',
'O delegado Nélson Guimarães, que apura a morte do sindicalista Oswaldo Cruz Júnior, não descarta
"motivações políticas" para o crime. O enterro foi marcado pela disputa da sucessão. Um grupo
apoiou o irmão de Oswaldo. Outro quer Cícero Bezerra da Silva, ligado a José Benedito de Souza,
suspeito do crime que está foragido. Brasil']
output = '\n'.join(yourlistname)
this will give you what you want
you can chose any seperator other than \n
I think this will help you:
s = ['My name is', 'XYZ', 'I am from X']
sen = ' '.join([i for i in s])
sen
'My name is XYZ I am from X'

Classifying data from .arff files with scikit-learn?

In a previous post i learned about the process to follow for classifying text with scikit-learn. In order to organize my data in a better way i discover .arff files let's say i have the following .arff file:
#relation lang_identification
#attribute opinion string
#attribute lang_identification {bos, pt, es, slov}
#data
"Pošto je EULEX obećao da će obaviti istragu o prošlosedmičnom izbijanju nasilja na sjeveru Kosova, taj incident predstavlja još jedan ispit kapaciteta misije da doprinese jačanju vladavine prava.",bos
"De todas as provações que teve de suplantar ao longo da vida, qual foi a mais difícil? O início. Qualquer começo apresenta dificuldades que parecem intransponíveis. Mas tive sempre a minha mãe do meu lado. Foi ela quem me ajudou a encontrar forças para enfrentar as situações mais decepcionantes, negativas, as que me punham mesmo furiosa.",pt
"Al parecer, Andrea Guasch pone que una relación a distancia es muy difícil de llevar como excusa. Algo con lo que, por lo visto, Alex Lequio no está nada de acuerdo. ¿O es que más bien ya ha conseguido la fama que andaba buscando?",es
"Vo väčšine golfových rezortov ide o veľký komplex niekoľkých ihrísk blízko pri sebe spojených s hotelmi a ďalšími možnosťami trávenia voľného času – nie vždy sú manželky či deti nadšenými golfistami, a tak potrebujú iný druh vyžitia. Zaujímavé kombinácie ponúkajú aj rakúske, švajčiarske či talianske Alpy, kde sa dá v zime lyžovať a v lete hrať golf pod vysokými alpskými končiarmi.",slov
I would like to experiment with scikit-learn and classify with a supervised aproach a complete new test string let's say:
test = "Por ello, ha insistido en que Europa tiene que darle un toque de atención porque Portugal esta incumpliendo la directiva del establecimiento del peaje"
Scipy provide an arff loader, let's load an arff file with this:
from scipy.io.arff import loadarff
dataset = loadarff(open('/Users/user/Desktop/toy.arff','r'))
print dataset
This should return something like this: (array([]), how can use numpy record arrays to classify with scikit-learn?.

Categories

Resources