Skip to content

Instantly share code, notes, and snippets.

@endlesspint8
Last active September 21, 2016 18:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save endlesspint8/5078720acd978067e7ddafc4e8e0fbd8 to your computer and use it in GitHub Desktop.
Save endlesspint8/5078720acd978067e7ddafc4e8e0fbd8 to your computer and use it in GitHub Desktop.
import csv
dutch_dict = {}
# stop words
with open('stopwords/stopwords_table_wTrans.csv', 'r') as f:
reader = csv.reader(f)
reader.next()
for row in reader:
dutch_dict[row[1]] = row[5]
# frequent words
with open('terms/top100_nonStopWords.csv', 'r') as f:
reader = csv.reader(f)
reader.next()
for row in reader:
dutch_dict[row[0]] = row[2]
# tf-idf
with open('terms/tfidf_scikit_top_word_ALL.csv', 'r') as f:
reader = csv.reader(f)
reader.next()
for row in reader:
dutch_dict[row[1]] = row[3]
# bd_bigrams
dutch_bigrams = {}
with open('terms/BD_bigrams.csv', 'r') as f:
reader = csv.reader(f)
for row in reader:
dutch_bigrams[row[1]] = row[2]
import os
bd_folders = next(os.walk('articles/'))[1]
print len(bd_folders)
bd_folders[:10]
# Out:
# 62
# ['20160418_1727',
# '20160419_0923',
# '20160419_1314',
# '20160419_1643',
# '20160420_0918',
# '20160420_1305',
# '20160420_1655',
# '20160421_0916',
# '20160421_1210',
# '20160422_0955']
nl_sentences = []
np.random.seed(10)
for rand in np.round(np.random.rand(10) * len(bd_folders)):
folder = bd_folders[int(rand)]
article_no = int(folder[-1])%3
article = os.listdir('articles/' + folder)[article_no]
article_txt = '/'.join(['articles', folder, article])
sent_no = int(folder[-1])
print folder, article_no, article_txt, sent_no
with open(article_txt, 'r') as f:
sentences = ''
for line in f.readlines():
sentences += line.rstrip('\n')
sentences = [s.strip() for s in sentences.split('. ')]
try:
nl_sentences.append(sentences[sent_no])
except:
nl_sentences.append(sentences[2]) # just b/c it's the lowest number that didn't come up in `sent_no`
# clean up the encoding
nl_sentences = map((lambda x: unicode(x, errors='replace').replace(u'\ufffd\ufffd', ' ')), nl_sentences)
def nl_translate(sentences):
for sent in sentences:
sent_list = sent.split()
sent_trans = []
word_pos = 0
while word_pos < len(sent_list[:-1]):
sent_bigram = ' '.join([sent_list[word_pos], sent_list[word_pos+1]]).lower()
# print sent_bigram
if sent_bigram in dutch_bigrams:
sent_trans.append(dutch_bigrams[sent_bigram])
word_pos += 2
else:
if word_pos == len(sent_list[:-1])-1:
if sent_list[word_pos].lower() in dutch_dict:
sent_trans.append(dutch_dict[sent_list[word_pos].lower()])
else:
sent_trans.append(sent_list[word_pos])
if sent_list[word_pos+1].lower() in dutch_dict:
sent_trans.append(dutch_dict[sent_list[word_pos+1].lower()])
else:
sent_trans.append(sent_list[word_pos+1])
word_pos += 1
else:
if sent_list[word_pos].lower() in dutch_dict:
sent_trans.append(dutch_dict[sent_list[word_pos].lower()])
else:
sent_trans.append(sent_list[word_pos])
word_pos += 1
print sent
print ' '.join(sent_trans)
print ''
sent_trans = []
nl_translate(nl_sentences)
# Out:
# Ook Waterschap Rivierenland kwam ter plaatse om onderzoek te doen
# also Waterschap Rivierenland came ter plaatse to research too do
# Uiteindelijk viel ook de laatste kandidaat na weken van onderhandelingen af Merkendeskundige Paul Moers denkt dat het met HoutBrox dezelfde kant op gaat als met V&D
# Uiteindelijk viel also the last kandidaat after soak from onderhandelingen down Merkendeskundige Paul Moers denkt that it with HoutBrox dezelfde kant on going as with V&D
# FC Den Bosch spreekt van een noodzakelijke ingrijpende wijziging'
# the vertrek from of the Horn zat there already a tijdje to to come FC bosch spreekt of a noodzakelijke ingrijpende wijziging'
# Het zou gaan om 5 vrouwen en 4 mannen in de leeftijd van 28 tot en met 49 jaar
# the would go to 5 vrouwen and 4 mannen in the leeftijd from 28 until and with 49 year
# De huidige huisvesting van arbeidsmigranten valt volgens Haaren niet onder reguliere bewoning De gemeente heeft de Raad van Bestuur van Cello vrijdag laten weten dat het van plan is een dwangsom van 10.000 euro per dag op te leggen met een maximum van 2 miljoen euro Directeur Toine van der Pol van Cello liet het college eerder weten dat Cello het landgoed per 1 juli wil verhuren aan Wim Vugts en dat beide partijen daar een tijdelijk azc zouden willen
# the huidige huisvesting from arbeidsmigranten valt according to Haaren not below reguliere bewoning the municipality has the Raad from Bestuur from Cello Friday laten know that it from plan is a dwangsom from 10.000 euro per day on too leggen right away maximum from 2 million euro Directeur Toine of the Pol from Cello liet the college previously know it Cello the estate per 1 juli want verhuren to Wim Vugts and it beide partijen over there a tijdelijk azc zouden want
# Als resultaat van de onderhandelingen staan er in ieder geval tot maandag vanaf 18.00 uur extra beveiligers op alle stad en streekbussen in Tilburg
# that weigerden more too rijden after a overval on vrijdagavond. as resultaat of the onderhandelingen stand there in ieder geval until maandag since 18.00 hour extra beveiligers on all stad and streekbussen in Tilburg
# Eerst kwam naar buiten dat de daders op heterdaad waren gepakt maar later werd gemeld dat zij waren gevlucht.Het is niet de eerste overval op buschauffeurs in Tilburg
# Eerst came to buiten that the daders on heterdaad goods gepakt but later became gemeld it they goods gevlucht.Het is not the first overval on buschauffeurs in Tilburg
# BRABANT Op 5 mei staat Nederland in het teken van de bevrijding van de Duitse overheersers na de Tweede Wereldoorlog
# brabant on 5 May state Netherlands in the teken of the liberation of the Duitse overheersers after the Tweede Wereldoorlog
# Van de 24 wagens werden er door de belastingdienst 6 direct weg getakeld vanwege belastingschulden
# of the 24 wagens were there by the belastingdienst 6 direct way getakeld vanwege belastingschulden
# "Natuurlijk kan de gemeente altijd zorgen dat de basale kosten worden gedekt
# "Natuurlijk can the municipality always zorgen that the basale kosten be gedekt
nl_article_titles = []
np.random.seed(10)
for rand in np.round(np.random.rand(10) * len(csv_files)):
article_date = csv_files[int(rand)].split('.')[0]
article_no = int(article_date[-1]) % 3
article = 'articles/' + csv_files[int(rand)]
with open(article, 'r') as f:
reader = csv.reader(f)
reader.next()
articles = []
for row in reader:
articles.append(row[-2])
nl_article_titles.append(articles[article_no])
nl_translate(nl_article_titles)
# Out:
# 50 vaten met drugsafval gevonden in Waardenburg
# 50 barrels with drugsafval gevonden in Waardenburg
# Al 15 kandidaat-kopers voor failliete modeketen HoutBrox
# already 15 kandidaat-kopers in front of failliete modeketen HoutBrox
# Fred van der Hoorn weg als technisch manager FC Den Bosch
# Fred of the Horn way as technisch manager FC bosch
# Hennepkwekerij aan Spoorlaan Tilburg gevonden; 9 aanhoudingen
# Hennepkwekerij to Spoorlaan tilburg gevonden; 9 aanhoudingen
# Arbeidsmigranten op Haarendael in strijd met bestemmingsplan; college dreigt met dwangsom
# Arbeidsmigranten on Haarendael in strijd with bestemmingsplan; college dreigt with dwangsom
# Staking Arriva-buschauffeurs afgelopen
# strike Arriva-buschauffeurs last
# Buschauffeurs Arriva in Tilburg staken na overval
# Buschauffeurs arriva in Tilburg staken after overval
# Meer dan 280.000 Brabanders maakten mogelijk de bevrijding mee
# Lake than 280.000 Brabanders maakten possible the liberation it
# Patsercontrole in Tilburg: 24 auto's in beslag genomen en 22.500 euro aan naheffingen opgelegd
# Patsercontrole in Tilburg: 24 auto's in fittings genomen and 22.500 euro to naheffingen opgelegd
# Diessen slaat handen ineen voor begrafenis 13-jarige Susane
# Diessen slaat handen ineen in front of begrafenis 13-jarige Susane
article_dicts = []
for folder in next(os.walk('articles/'))[1]:
article_path = 'articles/' + folder
for story in next(os.walk(article_path))[2]:
article_path_story = '/'.join([article_path, story])
with open(article_path_story, 'r') as f:
sentences = ''
for line in f.readlines():
sentences += line
words = sentences.split()
word_match = 0
for word in words:
if word in dutch_dict:
word_match += 1
temp_dict = {'folder': folder, 'story': story, 'word_count': len(words), 'match_count': word_match}
article_dicts.append(temp_dict)
article_stats = pd.DataFrame(article_dicts)
article_stats['match_per'] = article_stats.match_count/(article_stats.word_count)
article_stats.sort('match_per', ascending=False).head()
# Out:
# folder match_count story word_count match_per
# 57 20160425_1354 61 story1.txt 95 0.642105
# 62 20160425_1712 111 story3.txt 185 0.600000
# 50 20160424_1222 58 story3.txt 97 0.597938
# 133 20160504_0915 88 story2.txt 151 0.582781
# 83 20160428_0917 89 story3.txt 155 0.574194
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment