diff --git a/README.md b/README.md index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc4e9a8afef113aeda205cc3d773cdcc48bd9f01 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,2 @@ +# digital methods +Please visit the [Wiki](../../wiki)! \ No newline at end of file diff --git a/README.rst b/README.rst deleted file mode 100644 index d06c87d26ec5f314e0620e1a7559b8123ac50a04..0000000000000000000000000000000000000000 --- a/README.rst +++ /dev/null @@ -1,27 +0,0 @@ -SQLAlchemy model backend integration examples. - -To run this example: - -1. Clone the repository:: - - git clone https://github.com/flask-admin/flask-admin.git - cd flask-admin - -2. Create and activate a virtual environment:: - - virtualenv env - source env/bin/activate - -3. Install requirements:: - - pip install -r 'examples/sqla/requirements.txt' - -4. Run the application:: - - python examples/sqla/app.py - -The first time you run this example, a sample sqlite database gets populated automatically. To suppress this behaviour, -comment the following lines in app.py::: - - if not os.path.exists(database_path): - build_sample_db() diff --git a/app.py b/app.py index 2936940ca8b2044e0dcd1e205a8bfce7c0d14223..9b7e7d26fe8569e65558c9317750fa0bfb399cdc 100644 --- a/app.py +++ b/app.py @@ -7,10 +7,14 @@ from flask import Flask, flash, send_file, url_for from flask_sqlalchemy import SQLAlchemy from jinja2 import Template from markupsafe import Markup + + +from sqlalchemy import cast, Integer, Text, Column, ForeignKey, literal, null +from sqlalchemy.orm import sessionmaker, relationship, aliased +from sqlalchemy.sql import column, label, expression, functions from sqlalchemy.ext.hybrid import hybrid_property -from sqlalchemy.sql import expression, functions -from werkzeug.utils import redirect +from werkzeug.utils import redirect from wtforms import validators import flask_admin as admin @@ -91,6 +95,17 @@ class Programminglanguage(db.Model): return "{}".format(self.name) +class Method(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.String(64)) + description = db.Column(db.String(1024)) + parent_id = db.Column(db.Integer, db.ForeignKey('method.id')) + parent = db.relationship('Method', remote_side=[id], backref='children') + + def __str__(self): + return "{}".format(self.name) + + class SoftwareCategory(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(120)) @@ -123,7 +138,9 @@ class Software(db.Model): programminglanguages = db.relationship('Programminglanguage', secondary=software_programminglanguages_table) - architecture = db.Column(db.Enum('standalone', 'package', 'framework', 'app', 'SaaS', 'other', name='software_types')) + architecture = db.Column(db.Enum('standalone', 'package', 'framework', 'app', 'SaaS', 'plugin', 'other', name='software_types')) + + recommandedcitation = db.Column(db.String(120)) def __str__(self): return "{}".format(self.name) @@ -144,6 +161,15 @@ class Link(db.Model): return "<a href='#'>{}</a>:{}".format(self.type,self.url) +class Reference(db.Model): + id = db.Column(db.Integer, primary_key=True) + name = db.Column(db.Unicode(64)) + cited = db.Column(db.Unicode(64)) + + def __str__(self): + return "{}".format(self.name) + + # Flask views @app.route('/') def index(): @@ -209,12 +235,40 @@ class AdvancedSoftwareView(sqla.ModelView): raise flash("Not done") + @action('advancedexport2', 'AdvancedExport2') + def action_advancedexport2(self, ids): + try: + hierarchy = db.session.query(Method, literal(0).label('level')).filter(Method.parent_id == null()) \ + .cte(name="hierarchy", recursive=True) + + parent = aliased(hierarchy, name="p") + children = aliased(Method, name="c") + hierarchy = hierarchy.union_all( + db.session.query( + children, + (parent.c.level + 1).label("level")) + .filter(children.parent_id == parent.c.id)) + + result = db.session.query(hierarchy.c.level, hierarchy.c.id, hierarchy.c.parent_id, hierarchy.c.name, hierarchy.c.description)\ + .select_entity_from(hierarchy).order_by(hierarchy.c.id)\ + .all() + + # Generate sub pages + with open('templates/export/MethodsList.jinja2', "r", encoding="utf-8") as file_: + template = Template(file_.read()) + template.stream(methods=result).dump('../digitale-Methoden-wiki/MethodsList.asciidoc', encoding='utf-8') + flash("Files generated!") + except Exception as ex: + if not self.handle_view_exception(ex): + raise + flash("Not done") # Create admin -admin = admin.Admin(app, name='SoftwareTools: digital methods', template_mode='bootstrap3') +admin = admin.Admin(app, name='digital methods:software-tools', template_mode='bootstrap3') # Add views -admin.add_view(AdvancedSoftwareView(Software, db.session, name="SoftwareTool")) +admin.add_view(AdvancedSoftwareView(Software, db.session, name="Software-Tools")) +admin.add_view(sqla.ModelView(Method, db.session, name="methods")) admin.add_view(sqla.ModelView(Feature, db.session, category="Misc")) admin.add_view(sqla.ModelView(License, db.session, category="Misc")) admin.add_view(sqla.ModelView(Link, db.session, category="Misc")) @@ -232,6 +286,168 @@ def build_sample_db(): db.drop_all() db.create_all() + + method = Method(id=1, + name="digital methods", + description="", + parent=None) + db.session.add(method) + method1 = Method(id=2, + name="data mining", + description="", + parent=method) + db.session.add(method1) + + method2 = Method(id=3, + name="automated data collection", + description="", + parent=method1) + db.session.add(method2) + method3 = Method(id=4, + name="collect log-data", + description="", + parent=method2) + db.session.add(method3) + method3 = Method(id=5, + name="parsing from api", + description="", + parent=method2) + db.session.add(method3) + method3 = Method(id=6, + name="scraping", + description="", + parent=method2) + db.session.add(method3) + method4 = Method(id=7, + name="scraping (static content)", + description="", + parent=method3) + db.session.add(method4) + method4 = Method(id=8, + name="scraping (dynamic content)", + description="", + parent=method3) + db.session.add(method4) + method3 = Method(id=9, + name="crawling", + description="", + parent=method2) + db.session.add(method3) + method2 = Method(id=10, + name="data wrangling", + description="", + parent=method1) + db.session.add(method2) + method3 = Method(id=11, + name="regular expressions", + description="", + parent=method2) + db.session.add(method3) + method3 = Method(id=12, + name="format conversions", + description="", + parent=method2) + db.session.add(method3) + method3 = Method(id=13, + name="language preprocessing", + description="", + parent=method2) + db.session.add(method3) + method2 = Method(id=14, name="information extraction", + description="finding factual information in free text", + parent=method1) + db.session.add(method2) + method2 = Method(id=15,name="information retrieval", + description="", + parent=method1) + db.session.add(method2) + method2 = Method(id=16,name="statistical analysis", + description="", + parent=method1) + db.session.add(method2) + method3 = Method(id=17,name="frequency analysis", + description="", + parent=method2) + db.session.add(method3) + method3 = Method(id=18,name="classification/machine learning", + description="", + parent=method2) + db.session.add(method3) + method4 = Method(id=19,name="supervised classification", + description="", + parent=method3) + db.session.add(method4) + method4 = Method(id=20,name="topic models", + description="", + parent=method3) + db.session.add(method4) + method4 = Method(id=21,name="sentiment analysis", + description="", + parent=method3) + db.session.add(method4) + method4 = Method(id=22,name="automated narrative, argumentative structures, irony, metaphor detection/extraction", + description="", + parent=method3) + db.session.add(method4) + method3 = Method(id=23,name="network analysis", + description="", + parent=method2) + db.session.add(method3) + method4 = Method(id=24, name="knowledge graph construction", + description="finding factual information in free text", + parent=method3) + db.session.add(method4) + + method2 = Method(id=25,name="data visualization", + description="", + parent=method1) + db.session.add(method2) + method3 = Method(id=26,name="dynamic visualizations", + description="", + parent=method2) + db.session.add(method3) + + method1 = Method(id=27,name="science practice", + description="", + parent=method) + db.session.add(method1) + method2 = Method(id=28,name="digital research design", + description="", + parent=method1) + db.session.add(method2) + method2 = Method(id=29,name="collaborative work", + description="", + parent=method1) + db.session.add(method2) + method2 = Method(id=30,name="digital communication", + description="", + parent=method1) + db.session.add(method2) + method1 = Method(id=31,name="statistical modeling", + description="", + parent=method) + db.session.add(method1) + method2 = Method(id=32,name="regression analysis", + description="", + parent=method1) + db.session.add(method2) + method2 = Method(id=33,name="time-series analysis", + description="", + parent=method1) + db.session.add(method2) + method2 = Method(id=34,name="agent-based modeling", + description="", + parent=method1) + db.session.add(method2) + method2 = Method(id=35,name="digital communication", + description="", + parent=method1) + db.session.add(method2) + method1 = Method(id=36,name="social complexity modeling/ social simulation", + description="", + parent=method) + db.session.add(method1) + lic_unknown = License(name="Unknown") lic_bsd = License(name="BSD") lic_gpl2 = License(name="GPL", version="2.0") @@ -254,6 +470,7 @@ def build_sample_db(): prol_py = Programminglanguage(name="Python") prol_cy = Programminglanguage(name="Cython") prol_java = Programminglanguage(name="Java") + prol_scala = Programminglanguage(name="Scala") prol_objc = Programminglanguage(name="Objective-C") prol_jupyternb = Programminglanguage(name="Jupyter Notebook") prol_js = Programminglanguage(name="Javascript") @@ -285,6 +502,7 @@ def build_sample_db(): cat_search = SoftwareCategory(name="search", short_description="information retrieval in large datasets.") cat_ocr = SoftwareCategory(name="optical character recognition (OCR)",short_description="OCR is the mechanical or electronic conversion of images of typed, handwritten or printed text into machine-encoded text.") cat_oe = SoftwareCategory(name="online experiments", short_description="") + cat_agent = SoftwareCategory(name="Agent-based modeling", short_description="") cat_misc = SoftwareCategory(name="miscellaneous", short_description="") @@ -293,14 +511,14 @@ def build_sample_db(): db.session.add(cat_int) tool = Software(name="AWARE", - short_description="", + short_description="'AWARE is an Android framework dedicated to instrument, infer, log and share mobile context information, for application developers, researchers and smartphone users. AWARE captures hardware-, software-, and human-based data. The data is then analyzed using AWARE plugins. They transform data into information you can understand.' link:http://www.awareframework.com/what-is-aware/[Source, visited: 27.02.2019]", developer="", maintainer="", softwarecategory=cat_tracking, architecture="framework", license=lic_apache2, programminglanguages=[prol_java], - price="") + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://www.awareframework.com/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/denzilferreira/aware-client", comment="android")) @@ -315,8 +533,11 @@ def build_sample_db(): softwarecategory=cat_tracking, architecture="framework", license=lic_gpl3, - programminglanguages=[prol_java]) + programminglanguages=[prol_java], + price="0", + recommandedcitation="") db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://adrianprelipcean.github.io/", comment="dev")) db.session.add(Link(software=tool, type="repository", url="https://github.com/Badger-MEILI", comment="group")) @@ -327,20 +548,37 @@ def build_sample_db(): softwarecategory=cat_tracking, architecture="framework", license=lic_apache2, - programminglanguages=[prol_py,prol_java]) + programminglanguages=[prol_py,prol_java], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://passivedatakit.org/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/audaciouscode/PassiveDataKit-Django", comment="djangoserver")) db.session.add(Link(software=tool, type="repository", url="https://github.com/audaciouscode/PassiveDataKit-Android", comment="android")) db.session.add(Link(software=tool, type="repository", url="https://github.com/audaciouscode/PassiveDataKit-iOS", comment="iOS")) + tool = Software(name="Web Historian - Community Edition", + short_description="Chrome browser extension designed to integrate web browsing history data collection into research projects collecting other types of data from participants (e.g. surveys, in-depth interviews, experiments). It uses client-side D3 visualizations to inform participants about the data being collected during the informed consent process. It allows participants to delete specific browsing data or opt-out of browsing data collection. It directs participants to an online survey once they have reviewed their data and made a choice of whether to participate. It has been used with Qualtrics surveys, but any survey that accepts data from a URL will work. It works with the open source Passive Data Kit (PDK) as the backend for data collection. To successfully upload, you need to fill in the address of your PDK server in the js/app/config.js file.", + developer="Ericka Menchen-Trevino and Chris Karr", + maintainer="Ericka Menchen-Trevino and Chris Karr", + softwarecategory=cat_tracking, + architecture="plugin", + license=lic_gpl3, + programminglanguages=[prol_js], + price="0", + recommandedcitation="Menchen-Trevino, E., & Karr, C. (2018). Web Historian - Community Edition. Zenodo. https://doi.org/10.5281/zenodo.1322782") + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://doi.org/10.5281/zenodo.1322782", comment="doi")) + db.session.add(Link(software=tool, type="website", url="http://www.webhistorian.org", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/WebHistorian/community", comment="")) + tool = Software(name="facepager", developer="Jakob Jünger and Till Keyling", maintainer="Jakob Jünger", softwarecategory=cat_scraping, architecture="package", license=lic_mit, - programminglanguages=[prol_py]) + programminglanguages=[prol_py], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="wiki", url="https://github.com/strohne/Facepager", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/strohne/Facepager", comment="")) @@ -351,7 +589,8 @@ def build_sample_db(): softwarecategory=cat_scraping, architecture="package", license=lic_bsd, - programminglanguages=[prol_py]) + programminglanguages=[prol_py], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://scrapy.org/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/scrapy/scrapy", comment="")) @@ -362,18 +601,20 @@ def build_sample_db(): softwarecategory=cat_scraping, architecture="package", license=lic_agpl3, - programminglanguages=[prol_r]) + programminglanguages=[prol_r], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="repository", url="https://github.com/ropensci/RSelenium", comment="")) tool = Software(name="AmCAT", - short_description="The Amsterdam Content Analysis Toolkit (AmCAT) is an open source infrastructure that makes it easy to do large-scale automatic and manual content analysis (text analysis) for the social sciences and humanities.", + short_description="'The Amsterdam Content Analysis Toolkit (AmCAT) is an open source infrastructure that makes it easy to do large-scale automatic and manual content analysis (text analysis) for the social sciences and humanities.'", developer="Chris Karr", maintainer="Ju Yeong Kim", softwarecategory=cat_int, architecture="SaaS", license=lic_agpl3, - programminglanguages=[prol_py]) + programminglanguages=[prol_py], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://vanatteveldt.com/amcat/", comment="entwickler")) db.session.add(Link(software=tool, type="repository", url="https://github.com/amcat/amcat", comment="")) @@ -386,18 +627,20 @@ def build_sample_db(): softwarecategory=cat_int, architecture="standalone", license=lic_prop, - programminglanguages=[]) + programminglanguages=[], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://socialdatalab.net/COSMOS", comment="")) tool = Software(name="CWB", - short_description=" a fast, powerful and extremely flexible corpus querying system", - developer="", - maintainer="", + short_description="CWB, the IMS[Institut für Maschinelle Sprachverarbeitung Stuttgart] Open Corpus Workbench is 'a fast, powerful and extremely flexible corpus querying system.'", + developer="Stefan Evert et al.", + maintainer="Stefan Evert et al.", softwarecategory=cat_int, architecture="framework", license=lic_gpl3, - programminglanguages=[prol_c]) + programminglanguages=[prol_c], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://cwb.sourceforge.net/index.php", comment="")) db.session.add(Link(software=tool, type="repository", url="http://svn.code.sf.net/p/cwb/code/cwb/trunk", comment="cwb")) @@ -410,7 +653,8 @@ def build_sample_db(): softwarecategory=cat_int, architecture="framework", license=lic_lgpl, - programminglanguages=[prol_java,prol_r]) + programminglanguages=[prol_java,prol_r], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://lcm.informatik.uni-leipzig.de/generic.html", comment="")) @@ -421,7 +665,8 @@ def build_sample_db(): architecture="SaaS", softwarecategory=cat_int, license=lic_lgpl, - programminglanguages=[prol_java,prol_py,prol_r]) + programminglanguages=[prol_java,prol_py,prol_r], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://ilcm.informatik.uni-leipzig.de/", comment="")) @@ -432,29 +677,32 @@ def build_sample_db(): softwarecategory=cat_qda, architecture="standalone", license=lic_prop, - programminglanguages=[]) + programminglanguages=[], + price="600€/1 User/Perpetual") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://atlasti.com/de/produkt/what-is-atlas-ti/", comment="")) tool = Software(name="Leximancer", - short_description="Leximancer automatically analyses your text documents to identify the high level concepts in your text documents, delivering the key ideas and actionable insights you need with powerful interactive visualisations and data exports.", + short_description="'Leximancer automatically analyses your text documents to identify the high level concepts in your text documents, delivering the key ideas and actionable insights you need with powerful interactive visualisations and data exports.'", developer="", maintainer="", softwarecategory=cat_qda, architecture="standalone", license=lic_prop, - programminglanguages=[]) + programminglanguages=[], + price="1500 AUD/? User/Perpetual") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://info.leximancer.com/", comment="")) tool = Software(name="MAXQDA", - short_description="", + short_description="'MAXQDA gehört zu den weltweit führenden und umfangreichsten QDA-Software-Programmen im Bereich der Qualitativen und Mixed-Methods-Forschung. Die Software hilft Ihnen beim Erfassen, Organisieren, Analysieren, Visualisieren und Veröffentlichen Ihrer Daten. Ob Grounded Theory, Literaturreview, explorative Marktforschung, Interviews, Webseitenanalyse oder Surveys: Analysieren Sie was Sie wollen, wie Sie wollen.MAXQDA Analytics Pro ist die erweiterte Version von MAXQDA und enthält neben allen Funktionen für die Qualitative & Mixed Methods-Forschung auch ein Modul für die quantitative Textanalyse (MAXDictio) und ein Modul für die statistische Datenanalyse (MAXQDA Stats)'link:https://www.rrz.uni-hamburg.de/services/software/alphabetisch/maxqda.html[Source, visited: 27.02.2019]", developer="", maintainer="", softwarecategory=cat_qda, architecture="standalone", license=lic_prop, - programminglanguages=[]) + programminglanguages=[], + price="Unilizenz") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://www.rrz.uni-hamburg.de/services/software/alphabetisch/maxqda.html", comment="uhh")) @@ -465,7 +713,8 @@ def build_sample_db(): softwarecategory=cat_qda, architecture="standalone", license=lic_prop, - programminglanguages=[]) + programminglanguages=[], + price="") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://www.qsrinternational.com/nvivo/who-uses-nvivo/academics", comment="")) @@ -504,36 +753,39 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="", comment="")) tool = Software(name="RQDA", - short_description="It includes a number of standard Computer-Aided Qualitative Data Analysis features. In addition it seamlessly integrates with R, which means that a) statistical analysis on the coding is possible, and b) functions for data manipulation and analysis can be easily extended by writing R functions. To some extent, RQDA and R make an integrated platform for both quantitative and qualitative data analysis.", + short_description="'It includes a number of standard Computer-Aided Qualitative Data Analysis features. In addition it seamlessly integrates with R, which means that a) statistical analysis on the coding is possible, and b) functions for data manipulation and analysis can be easily extended by writing R functions. To some extent, RQDA and R make an integrated platform for both quantitative and qualitative data analysis.'", developer="Ronggui Huang", maintainer="Ronggui Huang", softwarecategory=cat_qda, architecture="package", license=lic_bsd, - programminglanguages=[prol_r]) + programminglanguages=[prol_r], + price="") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://rqda.r-forge.r-project.org/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/Ronggui/RQDA", comment="")) tool = Software(name="TAMS", - short_description="Text Analysis Markup System (TAMS) is both a system of marking documents for qualitative analysis and a series of tools for mining information based on that syntax.", + short_description="'Text Analysis Markup System (TAMS) is both a system of marking documents for qualitative analysis and a series of tools for mining information based on that syntax.'", developer="", maintainer="", softwarecategory=cat_qda, architecture="standalone", license=lic_gpl2, - programminglanguages=[]) + programminglanguages=[], + price="") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://sourceforge.net/projects/tamsys", comment="")) tool = Software(name="Apache OpenNLP", - short_description="OpenNLP supports the most common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, language detection and coreference resolution.", + short_description="'OpenNLP supports the most common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, parsing, language detection and coreference resolution.'", developer="", maintainer="", softwarecategory=cat_tm, license=lic_apache2, architecture="package", - programminglanguages=[prol_java]) + programminglanguages=[prol_java], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://opennlp.apache.org/", comment="")) db.session.add(Link(software=tool, type="repository", url="", comment="")) @@ -545,31 +797,34 @@ def build_sample_db(): softwarecategory=cat_tm, architecture="package", license=lic_lgpl, - programminglanguages=[prol_java]) + programminglanguages=[prol_java], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://gate.ac.uk/overview.html", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/GateNLP/gate-core", comment="")) tool = Software(name="Gensim", - short_description="Gensim is a Python library for topic modelling, document indexing and similarity retrieval with large corpora. Target audience is the natural language processing (NLP) and information retrieval (IR) community.", + short_description="'Gensim is a Python library for topic modelling, document indexing and similarity retrieval with large corpora. Target audience is the natural language processing (NLP) and information retrieval (IR) community.'", developer="", maintainer="", softwarecategory=cat_tm, architecture="package", license=lic_lgpl, - programminglanguages=[prol_py]) + programminglanguages=[prol_py], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://pypi.org/project/gensim/", comment="")) db.session.add(Link(software=tool, type="repository", url="", comment="")) tool = Software(name="NLTK", - short_description="NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for industrial-strength NLP libraries, and an active discussion forum.", + short_description="'NLTK is a leading platform for building Python programs to work with human language data. It provides easy-to-use interfaces to over 50 corpora and lexical resources such as WordNet, along with a suite of text processing libraries for classification, tokenization, stemming, tagging, parsing, and semantic reasoning, wrappers for industrial-strength NLP libraries, and an active discussion forum.'", developer="", maintainer="", softwarecategory=cat_tm, architecture="package", license=lic_apache2, - programminglanguages=[prol_py]) + programminglanguages=[prol_py], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://www.nltk.org/index.html", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/nltk/nltk", comment="")) @@ -581,7 +836,8 @@ def build_sample_db(): softwarecategory=cat_tm, architecture="package", license=lic_bsd, - programminglanguages=[prol_py]) + programminglanguages=[prol_py], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://pandas.pydata.org/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/pandas-dev/pandas", comment="")) @@ -593,19 +849,21 @@ def build_sample_db(): softwarecategory=cat_tm, architecture="package", license=lic_gpl3, - programminglanguages=[prol_r]) + programminglanguages=[prol_r], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://cran.r-project.org/package=polmineR", comment="cran")) db.session.add(Link(software=tool, type="repository", url="https://github.com/PolMine/polmineR", comment="")) tool = Software(name="quanteda", - short_description="The package is designed for R users needing to apply natural language processing to texts, from documents to final analysis. Its capabilities match or exceed those provided in many end-user software applications, many of which are expensive and not open source. The package is therefore of great benefit to researchers, students, and other analysts with fewer financial resources. While using quanteda requires R programming knowledge, its API is designed to enable powerful, efficient analysis with a minimum of steps. By emphasizing consistent design, furthermore, quanteda lowers the barriers to learning and using NLP and quantitative text analysis even for proficient R programmers.", + short_description="'The package is designed for R users needing to apply natural language processing to texts, from documents to final analysis. Its capabilities match or exceed those provided in many end-user software applications, many of which are expensive and not open source. The package is therefore of great benefit to researchers, students, and other analysts with fewer financial resources. While using quanteda requires R programming knowledge, its API is designed to enable powerful, efficient analysis with a minimum of steps. By emphasizing consistent design, furthermore, quanteda lowers the barriers to learning and using NLP and quantitative text analysis even for proficient R programmers.'", developer="Kenneth Benoit", maintainer="Kenneth Benoit", softwarecategory=cat_tm, architecture="package", license=lic_gpl3, - programminglanguages=[prol_r]) + programminglanguages=[prol_r], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://quanteda.io/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/quanteda/quanteda", comment="")) @@ -617,19 +875,21 @@ def build_sample_db(): softwarecategory=cat_tm, architecture="framework", license=lic_agpl3, - programminglanguages=[prol_java]) + programminglanguages=[prol_java], + price="") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://rapidminer.com/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/rapidminer/rapidminer-studio", comment="")) tool = Software(name="spaCy", - short_description=" spaCy excels at large-scale information extraction tasks. It's written from the ground up in carefully memory-managed Cython. Independent research has confirmed that spaCy is the fastest in the world. If your application needs to process entire web dumps, spaCy is the library you want to be using.", + short_description="spaCy 'excels at large-scale information extraction tasks. It's written from the ground up in carefully memory-managed Cython. Independent research has confirmed that spaCy is the fastest in the world. If your application needs to process entire web dumps, spaCy is the library you want to be using.'", developer="", maintainer="", softwarecategory=cat_tm, architecture="package", license=lic_mit, - programminglanguages=[prol_cy]) + programminglanguages=[prol_cy], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://spacy.io/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/explosion/spaCy", comment="")) @@ -641,7 +901,8 @@ def build_sample_db(): softwarecategory=cat_tm, architecture="framework", license=lic_gpl3, - programminglanguages=[prol_java]) + programminglanguages=[prol_java], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="https://stanfordnlp.github.io/CoreNLP/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/stanfordnlp/CoreNLP", comment="")) @@ -653,20 +914,22 @@ def build_sample_db(): softwarecategory=cat_tm, architecture="package", license=lic_gpl3, - programminglanguages=[prol_r]) + programminglanguages=[prol_r], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://tm.r-forge.r-project.org/", comment="")) db.session.add(Link(software=tool, type="website", url="https://cran.r-project.org/package=tm", comment="cran")) db.session.add(Link(software=tool, type="repository", url="", comment="")) tool = Software(name="xtas", - short_description="the eXtensible Text Analysis Suite(xtas) is a collection of natural language processing and text mining tools, brought together in a single software package with built-in distributed computing and support for the Elasticsearch document store.", + short_description="the eXtensible Text Analysis Suite(xtas) 'is a collection of natural language processing and text mining tools, brought together in a single software package with built-in distributed computing and support for the Elasticsearch document store.'", developer="", maintainer="", softwarecategory=cat_tm, architecture="framework", license=lic_apache2, - programminglanguages=[prol_py]) + programminglanguages=[prol_py], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://nlesc.github.io/xtas/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/NLeSC/xtas", comment="")) @@ -684,7 +947,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="https://github.com/mimno/Mallet", comment="")) tool = Software(name="TOME", - short_description="TOME is a tool to support the interactive exploration and visualization of text-based archives, supported by a Digital Humanities Startup Grant from the National Endowment for the Humanities (Lauren Klein and Jacob Eisenstein, co-PIs). Drawing upon the technique of topic modeling—a machine learning method for identifying the set of topics, or themes, in a document set—our tool allows humanities scholars to trace the evolution and circulation of these themes across networks and over time.", + short_description="'TOME is a tool to support the interactive exploration and visualization of text-based archives, supported by a Digital Humanities Startup Grant from the National Endowment for the Humanities (Lauren Klein and Jacob Eisenstein, co-PIs). Drawing upon the technique of topic modeling—a machine learning method for identifying the set of topics, or themes, in a document set—our tool allows humanities scholars to trace the evolution and circulation of these themes across networks and over time.'", developer="", maintainer="", softwarecategory=cat_topic, @@ -696,19 +959,20 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="https://github.com/GeorgiaTechDHLab/TOME/", comment="")) tool = Software(name="Stm", - short_description="The Structural Topic Model (STM) allows researchers to estimate topic models with document-level covariates. The package also includes tools for model selection, visualization, and estimation of topic-covariate regressions. Methods developed in Roberts et al (2014) <doi:10.1111/ajps.12103> and Roberts et al (2016) <doi:10.1080/01621459.2016.1141684>.", + short_description="'The Structural Topic Model (STM) allows researchers to estimate topic models with document-level covariates. The package also includes tools for model selection, visualization, and estimation of topic-covariate regressions. Methods developed in Roberts et al (2014) <doi:10.1111/ajps.12103> and Roberts et al (2016) <doi:10.1080/01621459.2016.1141684>.'", developer="", maintainer="", softwarecategory=cat_topic, architecture="package", license=lic_mit, - programminglanguages=[prol_r]) + programminglanguages=[prol_r], + price="0") db.session.add(tool) db.session.add(Link(software=tool, type="website", url="http://structuraltopicmodel.com", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/bstewart/stm", comment="")) tool = Software(name="lexicoder", - short_description="Lexicoder performs simple deductive content analyses of any kind of text, in almost any language. All that is required is the text itself, and a dictionary. Our own work initially focused on the analysis of newspaper stories during election campaigns, and both television and newspaper stories about public policy issues. The software can deal with almost any text, however, and lots of it. Our own databases typically include up to 100,000 news stories. Lexicoder processes these data, even with a relatively complicated coding dictionary, in about fifteen minutes. The software has, we hope, a wide range of applications in the social sciences. It is not the only software that conducts content analysis, of course - there are many packages out there, some of which are much more sophisticated than this one. The advantage to Lexicoder, however, is that it can run on any computer with a recent version of Java (PC or Mac), it is very simple to use, it can deal with huge bodies of data, it can be called from R as well as from the Command Line, and its free.", + short_description="'Lexicoder performs simple deductive content analyses of any kind of text, in almost any language. All that is required is the text itself, and a dictionary. Our own work initially focused on the analysis of newspaper stories during election campaigns, and both television and newspaper stories about public policy issues. The software can deal with almost any text, however, and lots of it. Our own databases typically include up to 100,000 news stories. Lexicoder processes these data, even with a relatively complicated coding dictionary, in about fifteen minutes. The software has, we hope, a wide range of applications in the social sciences. It is not the only software that conducts content analysis, of course - there are many packages out there, some of which are much more sophisticated than this one. The advantage to Lexicoder, however, is that it can run on any computer with a recent version of Java (PC or Mac), it is very simple to use, it can deal with huge bodies of data, it can be called from R as well as from the Command Line, and its free.'", developer="", maintainer="", softwarecategory=cat_senti, @@ -719,7 +983,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="website", url="http://www.lexicoder.com/index.html", comment="")) tool = Software(name="OpinionFinder", - short_description="OpinionFinder is a system that processes documents and automatically identifies subjective sentences as well as various aspects of subjectivity within sentences, including agents who are sources of opinion, direct subjective expressions and speech events, and sentiment expressions. OpinionFinder was developed by researchers at the University of Pittsburgh, Cornell University, and the University of Utah. In addition to OpinionFinder, we are also releasing the automatic annotations produced by running OpinionFinder on a subset of the Penn Treebank.", + short_description="'OpinionFinder is a system that processes documents and automatically identifies subjective sentences as well as various aspects of subjectivity within sentences, including agents who are sources of opinion, direct subjective expressions and speech events, and sentiment expressions. OpinionFinder was developed by researchers at the University of Pittsburgh, Cornell University, and the University of Utah. In addition to OpinionFinder, we are also releasing the automatic annotations produced by running OpinionFinder on a subset of the Penn Treebank.'", developer="", maintainer="", softwarecategory=cat_senti, @@ -731,7 +995,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="", comment="")) tool = Software(name="Readme", - short_description="The ReadMe software package for R takes as input a set of text documents (such as speeches, blog posts, newspaper articles, judicial opinions, movie reviews, etc.), a categorization scheme chosen by the user (e.g., ordered positive to negative sentiment ratings, unordered policy topics, or any other mutually exclusive and exhaustive set of categories), and a small subset of text documents hand classified into the given categories. ", + short_description="'The ReadMe software package for R takes as input a set of text documents (such as speeches, blog posts, newspaper articles, judicial opinions, movie reviews, etc.), a categorization scheme chosen by the user (e.g., ordered positive to negative sentiment ratings, unordered policy topics, or any other mutually exclusive and exhaustive set of categories), and a small subset of text documents hand classified into the given categories.'", developer="", maintainer="", softwarecategory=cat_senti, @@ -742,7 +1006,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="website", url="https://gking.harvard.edu/readme", comment="")) tool = Software(name="Gephi", - short_description="Gephi is an award-winning open-source platform for visualizing and manipulating large graphs.", + short_description="'Gephi is an award-winning open-source platform for visualizing and manipulating large graphs.'", developer="", maintainer="", softwarecategory=cat_visu, @@ -753,8 +1017,20 @@ def build_sample_db(): db.session.add(Link(software=tool, type="website", url="https://gephi.org/", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/gephi/gephi/", comment="")) + tool = Software(name="sigma.js", + short_description="'Sigma is a JavaScript library dedicated to graph drawing. It makes easy to publish networks on Web pages, and allows developers to integrate network exploration in rich Web applications.'", + developer="Alexis Jacomy", + maintainer="Alexis Jacomy", + softwarecategory=cat_visu, + architecture="package", + license=lic_mit, + programminglanguages=[prol_js]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://sigmajs.org/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/jacomyal/sigma.js", comment="")) + tool = Software(name="scikit-image", - short_description="scikit-image is a collection of algorithms for image processing. It is available free of charge and free of restriction. We pride ourselves on high-quality, peer-reviewed code, written by an active community of volunteers.", + short_description="'scikit-image is a collection of algorithms for image processing. It is available free of charge and free of restriction. We pride ourselves on high-quality, peer-reviewed code, written by an active community of volunteers.'", developer="Stéfan van der Walt, Johannes L. Schönberger, Juan Nunez-Iglesias, François Boulogne, Joshua D. Warner, Neil Yager, Emmanuelle Gouillart, Tony Yu, and the scikit-image contributors", maintainer="Stéfan van der Walt, Johannes L. Schönberger, Juan Nunez-Iglesias, François Boulogne, Joshua D. Warner, Neil Yager, Emmanuelle Gouillart, Tony Yu, and the scikit-image contributors", softwarecategory=cat_visu, @@ -766,7 +1042,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="https://github.com/scikit-image/scikit-image", comment="")) tool = Software(name="CATMA", - short_description="CATMA (Computer Assisted Text Markup and Analysis) is a practical and intuitive tool for text researchers. In CATMA users can combine the hermeneutic, ‘undogmatic’ and the digital, taxonomy based approach to text and corpora—as a single researcher, or in real-time collaboration with other team members.", + short_description="'CATMA (Computer Assisted Text Markup and Analysis) is a practical and intuitive tool for text researchers. In CATMA users can combine the hermeneutic, ‘undogmatic’ and the digital, taxonomy based approach to text and corpora—as a single researcher, or in real-time collaboration with other team members.'", developer="", maintainer="", softwarecategory=cat_kollab_anno, @@ -874,7 +1150,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="https://github.com/nmecsys/nowcasting", comment="")) tool = Software(name="AutoMap", - short_description="AutoMap enables the extraction of information from texts using Network Text Analysis methods. AutoMap supports the extraction of several types of data from unstructured documents. The type of information that can be extracted includes: content analytic data (words and frequencies), semantic network data (the network of concepts), meta-network data (the cross classification of concepts into their ontological category such as people, places and things and the connections among these classified concepts), and sentiment data (attitudes, beliefs). Extraction of each type of data assumes the previously listed type of data has been extracted.", + short_description="'AutoMap enables the extraction of information from texts using Network Text Analysis methods. AutoMap supports the extraction of several types of data from unstructured documents. The type of information that can be extracted includes: content analytic data (words and frequencies), semantic network data (the network of concepts), meta-network data (the cross classification of concepts into their ontological category such as people, places and things and the connections among these classified concepts), and sentiment data (attitudes, beliefs). Extraction of each type of data assumes the previously listed type of data has been extracted.'", developer="", maintainer="", softwarecategory=cat_net, @@ -919,7 +1195,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="website", url="http://mrvar.fdv.uni-lj.si/pajek/", comment="")) tool = Software(name="NetworkX", - short_description="Data structures for graphs, digraphs, and multigraphs Many standard graph algorithms Network structure and analysis measures Generators for classic graphs, random graphs, and synthetic networks Nodes can be 'anything' (e.g., text, images, XML records) Edges can hold arbitrary data (e.g., weights, time-series) Open source 3-clause BSD license Well tested with over 90% code coverage Additional benefits from Python include fast prototyping, easy to teach, and multi-platform", + short_description="'Data structures for graphs, digraphs, and multigraphs Many standard graph algorithms Network structure and analysis measures Generators for classic graphs, random graphs, and synthetic networks Nodes can be 'anything' (e.g., text, images, XML records) Edges can hold arbitrary data (e.g., weights, time-series) Open source 3-clause BSD license Well tested with over 90% code coverage Additional benefits from Python include fast prototyping, easy to teach, and multi-platform.'", developer="", maintainer="", softwarecategory=cat_net, @@ -931,7 +1207,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="", comment="")) tool = Software(name="UCINET", - short_description="UCINET 6 for Windows is a software package for the analysis of social network data. It was developed by Lin Freeman, Martin Everett and Steve Borgatti. It comes with the NetDraw network visualization tool.", + short_description="'UCINET 6 for Windows is a software package for the analysis of social network data. It was developed by Lin Freeman, Martin Everett and Steve Borgatti. It comes with the NetDraw network visualization tool.'", developer="", maintainer="", softwarecategory=cat_net, @@ -976,7 +1252,7 @@ def build_sample_db(): db.session.add(Link(software=f4analyse, type="website", url="https://www.audiotranskription.de/f4-analyse", comment="")) tool = Software(name="EXMARaLDA", - short_description="EXMARaLDA ist ein System für das computergestützte Arbeiten mit (vor allem) mündlichen Korpora. Es besteht aus einem Transkriptions- und Annotationseditor (Partitur-Editor), einem Tool zum Verwalten von Korpora (Corpus-Manager) und einem Such- und Analysewerkzeug (EXAKT).", + short_description="'EXMARaLDA ist ein System für das computergestützte Arbeiten mit (vor allem) mündlichen Korpora. Es besteht aus einem Transkriptions- und Annotationseditor (Partitur-Editor), einem Tool zum Verwalten von Korpora (Corpus-Manager) und einem Such- und Analysewerkzeug (EXAKT).'", developer="", maintainer="", softwarecategory=cat_transkript, @@ -988,7 +1264,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="https://github.com/EXMARaLDA/exmaralda", comment="")) tool = Software(name="tesseract", - short_description="Tesseract is an open source text recognizer (OCR) Engine, available under the Apache 2.0 license. It can be used directly, or (for programmers) using an API to extract printed text from images. It supports a wide variety of languages.", + short_description="'Tesseract is an open source text recognizer (OCR) Engine, available under the Apache 2.0 license. It can be used directly, or (for programmers) using an API to extract printed text from images. It supports a wide variety of languages.'", developer="Google, HP Inc.", maintainer="Ray Smith u. a. ", softwarecategory=cat_ocr, @@ -999,7 +1275,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="https://github.com/tesseract-ocr/tesseract", comment="")) tool = Software(name="nodeGame", - short_description="NodeGame is a free, open source JavaScript/HTML5 framework for conducting synchronous experiments online and in the lab directly in the browser window. It is specifically designed to support behavioral research along three dimensions: larger group sizes, real-time (but also discrete time) experiments, batches of simultaneous experiments.", + short_description="'NodeGame is a free, open source JavaScript/HTML5 framework for conducting synchronous experiments online and in the lab directly in the browser window. It is specifically designed to support behavioral research along three dimensions: larger group sizes, real-time (but also discrete time) experiments, batches of simultaneous experiments.'", developer="Stefan Balietti", maintainer="Stefan Balietti", softwarecategory=cat_oe, @@ -1011,7 +1287,7 @@ def build_sample_db(): db.session.add(Link(software=tool, type="repository", url="https://github.com/nodeGame", comment="")) tool = Software(name="scikit-learn", - short_description="Scikit-learn is a free software machine learning library for the Python programming language. It features various classification, regression and clustering algorithms including support vector machines, random forests, gradient boosting, k-means and DBSCAN, and is designed to interoperate with the Python numerical and scientific libraries NumPy and SciPy.", + short_description="'Scikit-learn is a free software machine learning library for the Python programming language. It features various classification, regression and clustering algorithms including support vector machines, random forests, gradient boosting, k-means and DBSCAN, and is designed to interoperate with the Python numerical and scientific libraries NumPy and SciPy.'", developer="Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V. and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P. and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.", maintainer="Pedregosa, F. and Varoquaux, G. and Gramfort, A. and Michel, V. and Thirion, B. and Grisel, O. and Blondel, M. and Prettenhofer, P. and Weiss, R. and Dubourg, V. and Vanderplas, J. and Passos, A. and Cournapeau, D. and Brucher, M. and Perrot, M. and Duchesnay, E.", softwarecategory=cat_misc, @@ -1022,6 +1298,31 @@ def build_sample_db(): db.session.add(Link(software=tool, type="website", url="https://scikit-learn.org/stable/index.html", comment="")) db.session.add(Link(software=tool, type="repository", url="https://github.com/scikit-learn/scikit-learn", comment="")) + tool = Software(name="NetLogo", + short_description="'NetLogo is a multi-agent programmable modeling environment. It is used by many tens of thousands of students, teachers and researchers worldwide. It also powers HubNet participatory simulations.'", + developer="Uri Wilensky", + maintainer="Uri Wilensky", + softwarecategory=cat_agent, + architecture="package", + license=lic_unknown, + programminglanguages=[prol_java, prol_scala]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://ccl.northwestern.edu/netlogo/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/NetLogo/NetLogo", comment="")) + + tool = Software(name="spades", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_misc, + architecture="package", + # license=, + programminglanguages=[prol_r]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://spades.predictiveecology.org/", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + + ''' tool = Software(name="", short_description="", diff --git a/sample_db.sqlite b/sample_db.sqlite index 71c57ac22da4c8b03f75d19b5e73b215f671f0a8..4b40f87ea9ff54c043f2eef9a97d635556d650e5 100644 Binary files a/sample_db.sqlite and b/sample_db.sqlite differ diff --git a/templates/export/MethodsList.jinja2 b/templates/export/MethodsList.jinja2 new file mode 100644 index 0000000000000000000000000000000000000000..701d368f9a4490979d53982d2784c15f710b1996 --- /dev/null +++ b/templates/export/MethodsList.jinja2 @@ -0,0 +1,10 @@ +:toc: +:toclevels: 8 +:toc-title: Table of contents (work in progress: this list is preliminary and will be updated continuously) +:sectnums: +:sectnumlevels: 8 + +{% for method in methods %} +{% for l in range(method.level+1) %}={% endfor %} {{ method.name }} +{{method.description}} +{% endfor %} \ No newline at end of file