|
|
|
import csv
|
|
|
|
import spacy
|
|
|
|
|
|
|
|
# opening the CSV file
|
|
|
|
def call_trees(file):
|
|
|
|
data = []
|
|
|
|
with open(file, mode ='r') as source:
|
|
|
|
# reading the CSV file
|
|
|
|
csvFile = csv.DictReader(source)
|
|
|
|
# displaying the contents of the CSV fil
|
|
|
|
for line in csvFile:
|
|
|
|
data.append(line)
|
|
|
|
return data
|
|
|
|
|
|
|
|
# open textfile
|
|
|
|
def open_dreams(textfile):
|
|
|
|
with open(textfile, mode ='r') as dreams:
|
|
|
|
dreaming = dreams.read()
|
|
|
|
return dreaming
|
|
|
|
|
|
|
|
def part_of_speech(text):
|
|
|
|
#load core english library
|
|
|
|
nlp = spacy.load("en_core_web_sm")
|
|
|
|
# import text in spacy
|
|
|
|
doc = nlp(text)
|
|
|
|
# Token and Tag
|
|
|
|
tokens = []
|
|
|
|
for token in doc:
|
|
|
|
tokens.append(token)
|
|
|
|
# You want list of Verb tokens
|
|
|
|
verbs = [token.text for token in doc if token.pos_ == "VERB"]
|
|
|
|
nouns = [token.text for token in doc if token.pos_ == "NOUN"]
|
|
|
|
adjectives = [token.text for token in doc if token.pos_ == "ADJ"]
|
|
|
|
articles = adjectives = [token.text for token in doc if token.pos_ == "DET"]
|
|
|
|
return doc, tokens, verbs, nouns, adjectives, articles
|
|
|
|
|
|
|
|
def convert_token_to_text(doc):
|
|
|
|
new_text = []
|
|
|
|
for i in doc:
|
|
|
|
new_text.append(''+i.text+'')
|
|
|
|
return new_text
|
|
|
|
|
|
|
|
def replace_pos(text, pos_list):
|
|
|
|
position = 0
|
|
|
|
for word in text:
|
|
|
|
if word in pos_list:
|
|
|
|
length = len(word)
|
|
|
|
replacement = length*" "
|
|
|
|
text[position]= replacement
|
|
|
|
position +=1
|
|
|
|
return text
|
|
|
|
|
|
|
|
def highlight_word(text, pos_list):
|
|
|
|
position = 0
|
|
|
|
for word in text:
|
|
|
|
if word in pos_list:
|
|
|
|
replacement = "**"+word.upper()+"**"
|
|
|
|
text[position]= replacement
|
|
|
|
position +=1
|
|
|
|
return text
|
|
|
|
|
|
|
|
def in_between(text, pos_list):
|
|
|
|
position = 0
|
|
|
|
for word in text:
|
|
|
|
if word in pos_list:
|
|
|
|
replacement = " !* "+word + " $& "
|
|
|
|
text[position]= replacement
|
|
|
|
position +=1
|
|
|
|
return text
|
|
|
|
# # distortion individual trees when ration <1
|
|
|
|
# def strong_distortion(text):
|
|
|
|
# vowels = ["a", "e", "i", "o", "u"]
|
|
|
|
# for letter in text:
|
|
|
|
# if letter in vowels:
|
|
|
|
# text = text.replace(letter, "!")
|
|
|
|
# return text
|
|
|
|
|
|
|
|
# if you call script by its own name, it will execute the commands\
|
|
|
|
# otherwise it will only activate the functions to be called elsewhere
|
|
|
|
if __name__ == '__main__':
|
|
|
|
# --------------
|
|
|
|
# create list of dictionaries with Forest, ha, Tree_1, Tree_2, Tree_3, CO2 in tonnes, ratio
|
|
|
|
file = "data_trees.csv"
|
|
|
|
data = call_trees(file)
|
|
|
|
#print(data)
|
|
|
|
|
|
|
|
# open file with dreams
|
|
|
|
textfile = "dreams_selection_till_p47.txt"
|
|
|
|
dreaming = open_dreams(textfile)
|
|
|
|
#print(dreaming)
|
|
|
|
|
|
|
|
# choose location and tree
|
|
|
|
print("These are locations where you can catch dreams near trees: \n")
|
|
|
|
nr = 0
|
|
|
|
for element in data:
|
|
|
|
print(str(nr) + ' --- ' + element['Forest'])
|
|
|
|
nr += 1
|
|
|
|
print("\n")
|
|
|
|
location = input("Where do you want to receive your dream? Type a number: \n")
|
|
|
|
print("Thanks for choosing "+ data[int(location)]['Forest']+".\n")
|
|
|
|
print("There are 3 trees that offer dream services: \n")
|
|
|
|
print("1" + ' --- ' + data[int(location)]['Tree_1'])
|
|
|
|
print("2" + ' --- ' + data[int(location)]['Tree_2'])
|
|
|
|
print("3" + ' --- ' + data[int(location)]['Tree_3'])
|
|
|
|
print("\n")
|
|
|
|
tree_number = input("Which tree do you prefer to dream with? Type a number: \n")
|
|
|
|
selected_tree = "Tree_"+tree_number
|
|
|
|
dream_tree = data[int(location)][selected_tree]
|
|
|
|
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
|
|
|
|
# Printing text
|
|
|
|
title = "Dreaming with "+ dream_tree +" in "+ data[int(location)]['Forest']
|
|
|
|
print(title)
|
|
|
|
print("_________________________________\n")
|
|
|
|
|
|
|
|
selected_description = selected_tree + "_description"
|
|
|
|
description_tree = data[int(location)][selected_description]
|
|
|
|
print(description_tree)
|
|
|
|
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
|
|
|
|
template_text = "Trees absorb CO2 from the air and generate oxygen. \
|
|
|
|
In forests and parks, the concentration of trees is high and CO2 emissions are often low,\
|
|
|
|
because traffic is inexistant. The air quality for humans is therefore generally better.\
|
|
|
|
The hypothesis exists that the high concentration of trees allows for more lucid dreaming.\
|
|
|
|
It is said as well that a personal relationship to a tree can enhance lucid dreaming as well,\
|
|
|
|
even if the tree is living in an urban area."
|
|
|
|
print(template_text)
|
|
|
|
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
|
|
|
|
doc, tokens, verbs, nouns, adjectives, articles = part_of_speech(dreaming)
|
|
|
|
# print("Verbs:", verbs)
|
|
|
|
# print("Nouns:", nouns)
|
|
|
|
# print("Adjectives:", adjectives)
|
|
|
|
# print("Articles:", articles)
|
|
|
|
|
|
|
|
# convert spacy token objects to strings in list
|
|
|
|
tokenized_text = convert_token_to_text(doc)
|
|
|
|
|
|
|
|
|
|
|
|
if float(data[int(location)]["CO2"]) < 1:
|
|
|
|
# if ration is <1
|
|
|
|
# replace verbs by spaces of same length
|
|
|
|
article_text = replace_pos(tokenized_text, articles)
|
|
|
|
final_text = replace_pos(article_text, nouns)
|
|
|
|
print("ENJOY YOUR DREAMS ! \n")
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
print(" ".join(final_text))
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
|
|
|
|
elif float(data[int(location)]["CO2"]) > 110000:
|
|
|
|
verb_text = highlight_word(tokenized_text, verbs)
|
|
|
|
final_text = highlight_word(verb_text, nouns)
|
|
|
|
print("ENJOY YOUR DREAMS ! \n")
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
print(" ".join(final_text))
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
else:
|
|
|
|
final_text = in_between(tokenized_text, nouns)
|
|
|
|
print("ENJOY YOUR DREAMS ! \n")
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
print(" ".join(final_text))
|
|
|
|
print("\n_________________________________\n")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# create 3 dream convertors depending on where the trees are located
|
|
|
|
# if ratio is < 1, , > 500000
|