From 0b9dcfc4d0cae2de5d3d17c1005dccedfea33158 Mon Sep 17 00:00:00 2001 From: Fabian Gallenkamp <fabian.gallenkamp@uni-hamburg.de> Date: Wed, 13 Feb 2019 17:04:09 +0100 Subject: [PATCH] multiple tools added --- app.py | 268 +++++++++++++++++++++++++++++++++++++---------- sample_db.sqlite | Bin 53248 -> 65536 bytes 2 files changed, 214 insertions(+), 54 deletions(-) diff --git a/app.py b/app.py index 0ce9c30..226e027 100644 --- a/app.py +++ b/app.py @@ -371,6 +371,7 @@ def build_sample_db(): db.drop_all() db.create_all() + lic_unknown = License(name="Unbekannt") lic_bsd = License(name="BSD") lic_gpl2 = License(name="GPL", version="2.0") lic_gpl3 = License(name="GPL", version="3.0") @@ -378,6 +379,8 @@ def build_sample_db(): lic_lgpl = License(name="LGPL") lic_apache2 = License(name="Apache", version="2.0") lic_mit = License(name="MIT") + lic_byncnd3 = License(name="CC BY-NC-ND", version="3.0") + lic_ccdl = License(name="CCDL", version="1.0") lic_prop = License(name="Proprietär") db.session.add(lic_gpl3) db.session.add(lic_gpl3) @@ -391,10 +394,16 @@ def build_sample_db(): prol_cy = Programminglanguage(name="Cython") prol_java = Programminglanguage(name="Java") prol_objc = Programminglanguage(name="Objective-C") + prol_jupyternb = Programminglanguage(name="Jupyter Notebook") + prol_js = Programminglanguage(name="Javascript") + prol_c = Programminglanguage(name="C") db.session.add(prol_r) db.session.add(prol_py) db.session.add(prol_java) db.session.add(prol_objc) + db.session.add(prol_jupyternb) + db.session.add(prol_js) + db.session.add(prol_c) cat_tracking = SoftwareCategory(name="datenschutzkonformes Tracking", short_description="Sammlung von Sensordaten/Logdaten oder Nutzungsdaten mit expliziter Einverständnis mittels Software auf dem Gerät.") cat_scraping = SoftwareCategory(name="Scraping", short_description="Tools im Zusammenhang mit Web-Scraping.") @@ -404,11 +413,16 @@ def build_sample_db(): cat_senti = SoftwareCategory(name="Sentiment Analysis", short_description="") cat_topic = SoftwareCategory(name="Topic-Modellierung", short_description="") - cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") - cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") - cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") + cat_visu = SoftwareCategory(name="Visualisierung", short_description="") + cat_kollab_anno = SoftwareCategory(name="Kollaboratives Annotieren", short_description="") + cat_kollab_write = SoftwareCategory(name="Kollaboratives Schreiben", short_description="") + cat_stat = SoftwareCategory(name="Statisik-Programme", short_description="Zur statistischen Modellierung einsetzbare Software.") + cat_repo = SoftwareCategory(name="Forschungsdatenspeicherung", short_description="") + cat_now = SoftwareCategory(name="Nowcasting", short_description="") + cat_net = SoftwareCategory(name="Netzwerkanalysen", short_description="social network analysis") cat_esmema = SoftwareCategory(name="ESM/EMA-Studien", short_description="Datenerhebung in 'natürlicher' Umgebung.") cat_transkript = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") + cat_search = SoftwareCategory(name="Audio-Transkribtion", short_description="Transkriptionssoftware") cat_misc = SoftwareCategory(name="Weiteres", short_description="Zu speziell zum Einordnen..") db.session.add(cat_tracking) @@ -719,6 +733,30 @@ def build_sample_db(): 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="")) + tool = Software(name="MALLET", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_topic, + architecture="package", + license=lic_apache2, + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://mallet.cs.umass.edu/", comment="")) + 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.", + developer="", + maintainer="", + softwarecategory=cat_topic, + architecture="package", + license=lic_unknown, + programminglanguages=[prol_py, prol_jupyternb]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://dhlab.lmc.gatech.edu/tome/", comment="")) + 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>.", developer="", @@ -731,115 +769,223 @@ def build_sample_db(): 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="", - short_description="", + 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.", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_senti, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_prop, + programminglanguages=[prol_java]) db.session.add(tool) - db.session.add(Link(software=tool, type="website", url="", comment="")) + 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.", + developer="", + maintainer="", + softwarecategory=cat_senti, + architecture="package", + license=lic_unknown, + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://mpqa.cs.pitt.edu/opinionfinder/", comment="")) db.session.add(Link(software=tool, type="repository", url="", comment="")) - tool = Software(name="", - short_description="", + 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. ", + developer="", + maintainer="", + softwarecategory=cat_senti, + architecture="package", + license=lic_byncnd3, + programminglanguages=[prol_r]) + db.session.add(tool) + 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.", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_visu, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_gpl3, + programminglanguages=[prol_java]) db.session.add(tool) db.session.add(Link(software=tool, type="website", url="", comment="")) - db.session.add(Link(software=tool, type="repository", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/gephi/gephi/", comment="")) + + tool = Software(name="WebAnno", + short_description="WebAnno is a multi-user tool supporting different roles such as annotator, curator, and project manager. The progress and quality of annotation projects can be monitored and measuered in terms of inter-annotator agreement. Multiple annotation projects can be conducted in parallel.", + developer="", + maintainer="", + softwarecategory=cat_kollab_anno, + architecture="package", + license=lic_apache2, + programminglanguages=[prol_py]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://webanno.github.io/webanno/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/webanno/webanno", comment="")) - tool = Software(name="", + tool = Software(name="FidusWriter", short_description="", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_kollab_write, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_agpl3, + programminglanguages=[prol_py,prol_js]) db.session.add(tool) - db.session.add(Link(software=tool, type="website", url="", comment="")) - db.session.add(Link(software=tool, type="repository", url="", comment="")) + db.session.add(Link(software=tool, type="website", url="https://fiduswriter.org", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/fiduswriter/fiduswriter", comment="")) - tool = Software(name="", + tool = Software(name="dataverse", short_description="", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_repo, + architecture="framework", + license=lic_apache2, + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://dataverse.org/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://github.com/IQSS/dataverse", comment="")) + + tool = Software(name="gretl", + short_description="Is a cross-platform software package for econometric analysis", + developer="", + maintainer="", + softwarecategory=cat_stat, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_gpl3, + programminglanguages=[prol_c]) db.session.add(tool) - db.session.add(Link(software=tool, type="website", url="", comment="")) - db.session.add(Link(software=tool, type="repository", url="", comment="")) + db.session.add(Link(software=tool, type="website", url="http://gretl.sourceforge.net/", comment="")) + db.session.add(Link(software=tool, type="repository", url="https://sourceforge.net/p/gretl/git/ci/master/tree/", comment="")) - tool = Software(name="", + tool = Software(name="MLwiN", short_description="", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_stat, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_prop, + programminglanguages=[]) db.session.add(tool) - db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="website", url="http://www.bristol.ac.uk/cmm/software/mlwin/", comment="")) db.session.add(Link(software=tool, type="repository", url="", comment="")) - tool = Software(name="", + tool = Software(name="SPSS", short_description="", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_stat, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_prop, + programminglanguages=[]) db.session.add(tool) - db.session.add(Link(software=tool, type="website", url="", comment="")) - db.session.add(Link(software=tool, type="repository", url="", comment="")) - tool = Software(name="", + tool = Software(name="STATA", short_description="", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_stat, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_prop, + programminglanguages=[]) db.session.add(tool) - db.session.add(Link(software=tool, type="website", url="", comment="")) - db.session.add(Link(software=tool, type="repository", url="", comment="")) - tool = Software(name="", + tool = Software(name="Nowcasting", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_now, + architecture="package", + license=lic_gpl3, + programminglanguages=[prol_r]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://cran.r-project.org/package=nowcasting", comment="cran")) + 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.", + developer="", + maintainer="", + softwarecategory=cat_net, + architecture="package", + license=lic_prop, + programminglanguages=[prol_java]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://www.casos.cs.cmu.edu/projects/automap/software.php", comment="")) + + tool = Software(name="NodeXL", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_net, + architecture="package", + license=lic_prop, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://www.smrfoundation.org/nodexl/", comment="")) + + tool = Software(name="ORA Pro", short_description="", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_net, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_prop, + programminglanguages=[]) db.session.add(tool) db.session.add(Link(software=tool, type="website", url="", comment="")) db.session.add(Link(software=tool, type="repository", url="", comment="")) - ''' - tool = Software(name="", + + tool = Software(name="Pajek", short_description="", developer="", maintainer="", - softwarecategory=cat_, + softwarecategory=cat_net, + architecture="package", + license=lic_prop, + programminglanguages=[]) + db.session.add(tool) + 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", + developer="", + maintainer="", + softwarecategory=cat_net, architecture="package", - license=lic_, - programminglanguages=[prol_]) + license=lic_bsd, + programminglanguages=[prol_py]) db.session.add(tool) db.session.add(Link(software=tool, type="website", url="", comment="")) 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.", + developer="", + maintainer="", + softwarecategory=cat_net, + architecture="package", + license=lic_prop, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="https://sites.google.com/site/ucinetsoftware/home", comment="")) + + tool = Software(name="LuceneSolr", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_search, + architecture="package", + license=lic_apache2, + programminglanguages=[]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="http://lucene.apache.org/solr/", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) paco = Software(name="paco", short_description="", @@ -863,6 +1009,20 @@ def build_sample_db(): db.session.add(f4analyse) db.session.add(Link(software=f4analyse, type="website", url="https://www.audiotranskription.de/f4-analyse", comment="")) + ''' + tool = Software(name="", + short_description="", + developer="", + maintainer="", + softwarecategory=cat_, + architecture="package", + license=lic_, + programminglanguages=[prol_]) + db.session.add(tool) + db.session.add(Link(software=tool, type="website", url="", comment="")) + db.session.add(Link(software=tool, type="repository", url="", comment="")) + ''' + db.session.commit() return diff --git a/sample_db.sqlite b/sample_db.sqlite index 81c755dbc5d1178004e2e2b7319413fd5bbc7d35..3cc47e76cddaaa783b797d81b5c6d5c4e731913c 100644 GIT binary patch delta 8952 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 L>KB083Ho{fkkDD+ delta 1015 zcmZo@U};#uJVBn3cca1+ei07-`3(GD_@DFN;6Km5kADmQYX13~1r^%)H_w+(Rp4Xg zKgPiSlm9LMWByD0$2JQpY~knOVr5~FWN@x5$;i)}e97NPgoF1i1AjWd5#J%cM!q0E zE8ai6XE!SfY~^Lr<(S+TqsPcTd2fu(W~;bUj696|zZn=97<l=A^J`5ONRSrRWqrxw z&K$?=!NkV+hH*J#2SdZeMkj$LR%u=a(dI&4UIqpRMn;Co|Ihu<m6hUQ(B%aSaWXOl zmn7z;<rk$WIOi9o`uPN~I!p2}2=Y2QGB7Z3GBQlAPBhn&kl<lZgy>*oWC%(u$V~Cg z%u6j|Vr{Y)=VcIYNd}w7$jGqyO`;K_nur(=gCtyiKw@4>Vlg{wW11*0gJiQlOzq^L z<eLJ`@*=zpqHU@$!Oc!7lNkA&gn1Z5b75kWU#6M~G-e3#GH5m{!v)RKZf};@{+NT6 zfq{WXdXoZ+f{FnDWKcMN;(yKmg#Rx8HU9JbC;1QY@8;jazm|U)|9t+L{F65eDrEE5 zvj{LVa>}sqGc$4uu<|i8GKw*=@-j0rN;9$YFf%fWGO=<qGcrmsvvM&rGKw&<axybA z3Ny2CFf(#Wva&NXG72%XvN1C<N-(psGBYwVGqbXQC?-~BW=2L?W>zK;#lp(S%*ZIt z3JQEPmX{3tm-&16efW9!j!hO?5XrfLwT?B6Rh8xC#>P?>CM&ba)Bjnr%jui4F(`UY zc3dXUm!6-Wo|CFykeHk=t7bBp<-h9W#-(bLZ!F<qmeDnuT(CxT@}DK*o9{hU<KmHK zXkg%f%s-z$d8DU^Hym8de3lG+-Fz{8mYWp?wE0vO<#-t6Vd+sZ%_K1|F{iRPm6fBo t1e7*&^7B%4WhZaAsVv2wR+N~VTAp8&-BcvQ%OKq93rlaCBTuI?0sw(--qrvB -- GitLab