opensourcegames/code/maintenance_collect_inspiration_infos.py
2020-09-05 10:59:17 +02:00

95 lines
3.4 KiB
Python

"""
Maintenance of inspirations.md and synchronization with the inspirations in the entries.
"""
import time
from utils import constants as c, utils, osg, osg_ui
from utils import osg_wikipedia
def check_for_duplicates():
"""
:param inspirations:
:return:
"""
print('\nduplicate check')
inspiration_names = [x['name'] for x in inspirations]
for index, name in enumerate(inspiration_names):
for other_name in inspiration_names[index+1:]:
if osg.name_similarity(name, other_name) > 0.8:
print(' {} - {} is similar'.format(name, other_name))
def test():
# assemble info
t0 = time.process_time()
entries = osg.read_entries()
print('took {}s'.format(time.process_time()-t0))
t0 = time.process_time()
# entries = osg.assemble_infos()
# osg.write_entries(entries)
print('took {}s'.format(time.process_time()-t0))
# assemble inspirations info from entries
entries_inspirations = {}
for entry in entries:
entry_name = entry['name']
keywords = entry['keywords']
entry_inspirations = [x for x in keywords if x.startswith('inspired by')]
if entry_inspirations:
entry_inspirations = entry_inspirations[0][len('inspired by'):]
entry_inspirations = entry_inspirations.split('+')
entry_inspirations = [x.strip() for x in entry_inspirations]
for entry_inspiration in entry_inspirations:
if entry_inspiration in entries_inspirations:
entries_inspirations[entry_inspiration].append(entry_name)
else:
entries_inspirations[entry_inspiration] = [ entry_name ]
print('{} inspirations in the entries'.format(len(entries_inspirations)))
# first check if all inspiration in entries are also in inspirations
inspiration_names = [x['name'] for x in inspirations]
for inspiration, entries in entries_inspirations.items():
if inspiration not in inspiration_names:
print('new inspiration {} for games {}'.format(inspiration, ', '.join(entries)))
similar_names = [x for x in inspiration_names if osg.name_similarity(inspiration, x) > 0.8]
if similar_names:
print(' similar names {}'.format(', '.join(similar_names)))
# now the other way around
for index, name in enumerate(inspiration_names):
if name not in entries_inspirations:
print('potential removed inspiration {} from games {}'.format(name, inspirations[index]['inspired entries']))
similar_names = [x for x in entries_inspirations.keys() if osg.name_similarity(name, x) > 0.8]
if similar_names:
print(' similar names {}'.format(', '.join(similar_names)))
def read_inspirations():
inspirations = osg.read_inspirations_info()
print('{} inspirations in the inspirations database'.format(len(inspirations)))
def write_inspirations():
osg.write_inspirations_info(inspirations)
print('inspirations written')
if __name__ == "__main__":
inspirations = osg.read_inspirations_info()
osg.write_inspirations_info(inspirations)
inspirations = None
entries = None
actions = {
'Read inspirations': read_inspirations,
'Write inspirations': write_inspirations,
'Check for duplicates': check_for_duplicates,
}
osg_ui.run_simple_button_app('Maintenance inspirations', actions)