From fe1f85a6d5de94bea89dcd8fcd388c0859a1ecf3 Mon Sep 17 00:00:00 2001 From: Fabian Gallenkamp <fabian.gallenkamp@uni-hamburg.de> Date: Thu, 28 Feb 2019 16:56:46 +0100 Subject: [PATCH] added references and working on methods --- app.py | 193 +++++++++++++++++++--------- sample_db.sqlite | Bin 81920 -> 90112 bytes templates/admin/index.html | 4 +- templates/export/MethodsList.jinja2 | 12 +- 4 files changed, 147 insertions(+), 62 deletions(-) diff --git a/app.py b/app.py index 9b7e7d2..45838da 100644 --- a/app.py +++ b/app.py @@ -18,7 +18,7 @@ from werkzeug.utils import redirect from wtforms import validators import flask_admin as admin -from flask_admin.base import MenuLink +from flask_admin.base import MenuLink, AdminIndexView from flask_admin.contrib import sqla from flask_admin.contrib.sqla import filters from flask_admin.contrib.sqla.form import InlineModelConverter @@ -171,9 +171,9 @@ class Reference(db.Model): # Flask views -@app.route('/') -def index(): - return redirect(url_for("admin.index")) +#@app.route('/') +#def index(): +# return redirect(url_for("admin.index")) class AdvancedSoftwareView(sqla.ModelView): @@ -252,11 +252,12 @@ class AdvancedSoftwareView(sqla.ModelView): 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() + references = db.session.query(Reference).order_by(Reference.name).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') + template.stream(methods=result, references=references).dump('../digitale-Methoden-wiki/MethodsList.asciidoc', encoding='utf-8') flash("Files generated!") except Exception as ex: if not self.handle_view_exception(ex): @@ -264,18 +265,22 @@ class AdvancedSoftwareView(sqla.ModelView): flash("Not done") # Create admin -admin = admin.Admin(app, name='digital methods:software-tools', template_mode='bootstrap3') +admin = admin.Admin(app, name='digital methods:software-tools', template_mode='bootstrap3', index_view=AdminIndexView( + name='home', + template='admin/index.html', + url='/' + )) # Add views -admin.add_view(AdvancedSoftwareView(Software, db.session, name="Software-Tools")) +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")) -admin.add_view(sqla.ModelView(SoftwareCategory, db.session, category="Misc")) -admin.add_sub_category(name="Other collections", parent_name="Misc") -admin.add_link(MenuLink(name="CRAN-R", url='https://cran.r-project.org/web/views/', category='Other collections', target="_blank")) -admin.add_link(MenuLink(name="ROpenSci", url='https://ropensci.org/packages/', category='Other collections', target="_blank")) +admin.add_view(sqla.ModelView(Feature, db.session, category="miscellaneous")) +admin.add_view(sqla.ModelView(License, db.session, category="miscellaneous")) +admin.add_view(sqla.ModelView(Link, db.session, category="miscellaneous")) +admin.add_view(sqla.ModelView(SoftwareCategory, db.session, category="miscellaneous")) +admin.add_sub_category(name="other collections", parent_name="miscellaneous") +admin.add_link(MenuLink(name="CRAN-R", url='https://cran.r-project.org/web/views/', category='other collections', target="_blank")) +admin.add_link(MenuLink(name="ROpenSci", url='https://ropensci.org/packages/', category='other collections', target="_blank")) @@ -289,165 +294,235 @@ def build_sample_db(): method = Method(id=1, name="digital methods", - description="", + description="""<<Rogers2013>> distinguishes between digitalized/virtual and digital methods. The former methods import standard methods from the social sciences and humanities into the emerging medium. The latter are completly new methods which emerge following the new structures and their properties. + +In this project a more inclusive conception of digital methods is assumed: the potential use of digital technology during the research.""", parent=None) db.session.add(method) method1 = Method(id=2, name="data mining", - description="", + description="""Refers to the complete process of 'knowledge mining from data'.<<Han_etal2012>> Can be applied on various data types and consists of different steps and paradigms.""", parent=method) db.session.add(method1) method2 = Method(id=3, name="automated data collection", - description="", + description="""In principal there are multiple possible data sources in a data mining process. A basic distinction in relevance to automated data collection can be drawn between connected devices(internet, intranets) or unconnected devices(sensors, etc.). + +Furthermore the server-client-model is the established communication paradigms for connected devices. In order to obtain data either from server or client there exists three different interfaces: log files, apis and user interfaces which constitute the available procedures <<Jünger2018>>.""", parent=method1) db.session.add(method2) method3 = Method(id=4, name="collect log-data", - description="", + description="Collect log data which occur during providing the (web-)service or the information processing.", parent=method2) db.session.add(method3) method3 = Method(id=5, name="parsing from api", - description="", + description="Parse structured data from via a documented REST-API.", parent=method2) db.session.add(method3) method3 = Method(id=6, name="scraping", - description="", + description="Automatically parse unstructured or semi-structured data from a normal website (⇒ web-scraping) or service.", parent=method2) db.session.add(method3) method4 = Method(id=7, name="scraping (static content)", - description="", + description="Automatically parse data from static HTML websites.", parent=method3) db.session.add(method4) method4 = Method(id=8, name="scraping (dynamic content)", - description="", + description="Automatically parse dynamic content (HTML5/Javascript,) ⇒ sometimes requires mimicking user-interaction.", parent=method3) db.session.add(method4) method3 = Method(id=9, name="crawling", - description="", + description="Collect websites with an initial set of webpages by following contained links <<Ignatow_etal2017>>.", parent=method2) db.session.add(method3) method2 = Method(id=10, name="data wrangling", - description="", + description="Translate data into suited formats for automatic analysis. Examples: PDFs ⇒ Text . For a practical framework refer also <<Wickham_etal2017>>.", parent=method1) db.session.add(method2) method3 = Method(id=11, name="regular expressions", - description="", + description="Complex string manipulations by searching and replacing specific patterns.", parent=method2) db.session.add(method3) method3 = Method(id=12, - name="format conversions", - description="", + name="data-format conversions", + description="Transfer between different formats in order to unify and handle vacancies.", parent=method2) db.session.add(method3) - method3 = Method(id=13, - name="language preprocessing", - description="", + method2 = Method(id=13, + name="text preprocessing", + description="Some text preprocessing tasks in natuaral language processing.", + parent=method1) + db.session.add(method2) + method3 = Method(id=14, + name="tokenization", + description="Identify words in character input sequence.", parent=method2) db.session.add(method3) - method2 = Method(id=14, name="information extraction", - description="finding factual information in free text", + method3 = Method(id=15, + name="stop-word removal", + description="Removing high-frequency words like pronoums, determiners or prepositions.", + parent=method2) + db.session.add(method3) + method3 = Method(id=16, + name="stemming", + description="Identify common stems on a syntactical level.", + parent=method2) + db.session.add(method3) + method3 = Method(id=17, + name="word/sentence segmentation", + description="Separate a chunk of continuous text into separate words/sentences.", + parent=method2) + db.session.add(method3) + method3 = Method(id=18, + name="part-of-speech(POS)-tagging", + description="Identify the part of speech for words.", + parent=method2) + db.session.add(method3) + method3 = Method(id=19, + name="dependency parsing", + description="Create syntactic trees from input text using mostly unsupervised learning on manually annotated treebanks (<<Ignatow_etal2017>>,61).", + parent=method2) + db.session.add(method3) + method4 = Method(id=20, + name="syntactic parsing", + description="Create syntactic trees from input text using mostly unsupervised learning on manually annotated treebanks (<<Ignatow_etal2017>>,61).", + parent=method3) + db.session.add(method4) + method3 = Method(id=21, + name="word-sense disambiguation", + description="Recognizing context-sensetive meaning of words.", + parent=method2) + db.session.add(method3) + method2 = Method(id=22, name="information extraction", + description="Finding factual information(e.g. places in free text", parent=method1) - db.session.add(method2) - method2 = Method(id=15,name="information retrieval", + db.session.add(method3) + method3 = Method(id=23, + name="(named-)entity-recognition/resolution/extraction", + description="Identify instances of specific (pre-)defined types(e.g place, name or color) in text.", + parent=method2) + db.session.add(method3) + method3 = Method(id=24, + name="relation extraction", + description="", + parent=method3) + db.session.add(method3) + method2 = Method(id=25,name="information retrieval", description="", parent=method1) db.session.add(method2) - method2 = Method(id=16,name="statistical analysis", + method2 = Method(id=26,name="statistical analysis", description="", parent=method1) db.session.add(method2) - method3 = Method(id=17,name="frequency analysis", - description="", + method3 = Method(id=27,name="frequency analysis", + description="Descriptiv statistical analysis by using text fragments", parent=method2) db.session.add(method3) - method3 = Method(id=18,name="classification/machine learning", + method3 = Method(id=28,name="classification/machine learning", description="", parent=method2) db.session.add(method3) - method4 = Method(id=19,name="supervised classification", + method4 = Method(id=29,name="supervised classification", description="", parent=method3) db.session.add(method4) - method4 = Method(id=20,name="topic models", + method4 = Method(id=30,name="topic models", description="", parent=method3) db.session.add(method4) - method4 = Method(id=21,name="sentiment analysis", - description="", + method4 = Method(id=31,name="sentiment analysis", + description="'Subjectivity and sentiment analysis focuses on the automatic identification of private states, such as opinions, emotions, sentiments, evaluations, beliefs, and speculations in natural language. While subjectivity classification labels text as either subjective or objective, sentiment classification adds an additional level of granularity, by further classifying subjective text as either positive, negative, or neutral.' (<<Ignatow_etal2017>> pp. 148)", parent=method3) db.session.add(method4) - method4 = Method(id=22,name="automated narrative, argumentative structures, irony, metaphor detection/extraction", + method4 = Method(id=32,name="automated narrative, argumentative structures, irony, metaphor detection/extraction", description="", parent=method3) db.session.add(method4) - method3 = Method(id=23,name="network analysis", + method3 = Method(id=33,name="network analysis", description="", parent=method2) db.session.add(method3) - method4 = Method(id=24, name="knowledge graph construction", + method4 = Method(id=34, name="knowledge graph construction", description="finding factual information in free text", parent=method3) db.session.add(method4) - method2 = Method(id=25,name="data visualization", + method2 = Method(id=35,name="data visualization", description="", parent=method1) db.session.add(method2) - method3 = Method(id=26,name="dynamic visualizations", + method3 = Method(id=36,name="dynamic visualizations", description="", parent=method2) db.session.add(method3) - method1 = Method(id=27,name="science practice", + method1 = Method(id=37,name="science practice", description="", parent=method) db.session.add(method1) - method2 = Method(id=28,name="digital research design", + method2 = Method(id=38,name="digital research design", description="", parent=method1) db.session.add(method2) - method2 = Method(id=29,name="collaborative work", + method2 = Method(id=39,name="collaborative work", description="", parent=method1) db.session.add(method2) - method2 = Method(id=30,name="digital communication", + method2 = Method(id=40,name="digital communication", description="", parent=method1) db.session.add(method2) - method1 = Method(id=31,name="statistical modeling", + method1 = Method(id=41,name="statistical modeling", description="", parent=method) db.session.add(method1) - method2 = Method(id=32,name="regression analysis", + method2 = Method(id=42,name="regression analysis", description="", parent=method1) db.session.add(method2) - method2 = Method(id=33,name="time-series analysis", + method2 = Method(id=43,name="time-series analysis", description="", parent=method1) db.session.add(method2) - method2 = Method(id=34,name="agent-based modeling", + method2 = Method(id=44,name="agent-based modeling", description="", parent=method1) db.session.add(method2) - method2 = Method(id=35,name="digital communication", + method2 = Method(id=45,name="digital communication", description="", parent=method1) db.session.add(method2) - method1 = Method(id=36,name="social complexity modeling/ social simulation", + method1 = Method(id=46,name="social complexity modeling/ social simulation", description="", parent=method) db.session.add(method1) + reference = Reference(name="Rogers2013", + cited="Rogers, R. (2013). Digital methods. Cambridge, Massachusetts, London, England: The MIT Press.") + db.session.add(reference) + reference = Reference(name="Jünger2018", + cited="Jünger, Jakob (2018): Mapping the Field of Automated Data Collection on the Web. Data Types, Collection Approaches and their Research Logic. In: Stützer, Cathleen / Welker, Martin / Egger, Marc (Hg). Computational Social Science in the Age of Big Data. Concepts, Methodologies, Tools, and Applications. Neue Schriften zur Online-Forschung der Deutschen Gesellschaft für Online-Forschung (DGOF). Köln: Halem-Verlag, S. 104-130.") + db.session.add(reference) + reference = Reference(name="Han_etal2012", + cited="Han, J., Kamber, M., & Pei, J. (2012). Data Mining: Concepts and Techniques. Saint Louis, UNITED STATES: Elsevier Science & Technology.") + db.session.add(reference) + reference = Reference(name="Ignatow_etal2017", + cited="Ignatow, G., & Mihalcea, R. F. (2017). Text mining: A guidebook for the social sciences. Los Angeles, London, New Delhi, Singapore, Washington DC, Melbourne: Sage.") + db.session.add(reference) + reference = Reference(name="Wickham_etal2017", + cited="Wickham, H., & Grolemund, G. (2017). R for Data Science: Import, tidy, transform, visualize, and model data. Beijing, Boston, Farnham, Sebastopol, Tokyo: O’Reilly UK Ltd.") + db.session.add(reference) + + + lic_unknown = License(name="Unknown") lic_bsd = License(name="BSD") lic_gpl2 = License(name="GPL", version="2.0") @@ -1345,7 +1420,7 @@ if __name__ == '__main__': # Build a sample db on the fly, if one does not exist yet. app_dir = op.realpath(os.path.dirname(__file__)) database_path = op.join(app_dir, app.config['DATABASE_FILE']) - if not os.path.exists(database_path): - build_sample_db() + #if not os.path.exists(database_path): + build_sample_db() # Start app app.run(debug=True) diff --git a/sample_db.sqlite b/sample_db.sqlite index 4b40f87ea9ff54c043f2eef9a97d635556d650e5..1f327e1a1de8264c04b8213dac76cadc1cc3f59d 100644 GIT binary patch delta 11681 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 delta 1228 zcmZoTz}nEjIzdW^ftP`SL4*MTcqZx?F){FNOjzLW1d@~G@nhhB#eai8knaND4!#w< zYk9l*X7F3{)$%3tx$?{LGx2HjvG8W`hVk0)Jm8td`-aDl?*;EU{)7C>_=`3x3h?kS zc}YzF8^-9#A?_l^%3vAGINd>zQH(Kd`i2-rsp*#CjJ(W(QKHj5!x<wD1tmmS84P(D zi&OJTGILY&N)!_F5_2kxGm8a<gjpF>c^OOc3o?@xa`RJCbBYD!g{DhHGs<ZSDsZqe zIPx+UCl@6aWagzSXrxr;CFW)(D<tRVm89mCXtK$(vohH8PW~7u#mpunHQ6ypnpsjz zd~$q{C^NsR;B?DqMwNPg2?4O}X+^1prKx$zm2lhnWq4T`EO{Ao67$ka6Vp=_3W`z- zit>|Fi;FY!(zzsfAo}u)auZ8Hc9x|U6=&w>6>~{)voaX-G8Uz#m*ylEDWp~u6oK@B zr1&^l8Dx1GlZz6|b29VNnfV;qzydH&FpIIWGU)O$79<vdEKx`+%Fk6uEXZUQV*!gN z=jY_4CYLDW<frSVB$gyHOGr+CAHgWWB*i~DF;be5Z*py<w5$jhD}yF4BS?Wlc~N3s zI>;_2d1g>(FiviWmSko!lAXRZoY5#sQiheml$W!(B(Ws3xFj<<F$WUPnR)4=(jY52 zi<2``^O8ZnPfRY!OimSGVr5X~<pdj^o0*rHmoCD{%An25kdm36Spw3ZT9T2UQoJdF zMPM_F!XJJfRt5$J7XCM&1Shnar{OWbpr9QC1A~Aj0|NuU0s{jBAKxYg7KM5Xz7_`l zU;Ll>-|#=>zt4Yz|04e>{=@ux__y+}<6q9dfPW_cB>ryx7XDiPGX8x2O#USPX#Nm> zUw$`!dwvUkLw+rOWqw(HF@6DlE`DadKYU;L-toQQd&qa2?<(IpzT<oc`F8Pb=3B$J zly4s248BQx-Fz(|M?vvs9RWtZdR7Z&Mn**@R&!=XMiXWhGiF9kCl*s?Mou196J|z6 z9wt^}5XH=D#LUQO&CF^DqF7iBm>C(_m{|0g89CKi^_UqMb=g>TK@<~<4l^UCF^e`c zBd0X07BeHG8Z(O~GbbZ6s|GV8BP$cDIx{1qBPXjGh+?j1Rb^&m)L~*#VP@nMVNqsg z<m6^mVrFFIW@b@jX5>_0RbXahlwx9)XJ%w%VPlnJW@L0=VwGiPWaMIJm0@ONRApwB zW@coxXJeIOW@NNrVwGfOWRz!Sm0)IMlw@KRXJ%y7W?~UzX5>_16=h~*l;dC(VP<5M zU}6<!W@N0_Vqz6yW@NNuVija&WMpP$6#!98to+Q3jLNL6d?1R6m6w^3k%NhqhnbO4 zpPiMPnUT?!nU#x~kx`tPm6Mr~QI?sNgPD<0lZ};~nURr+nU#&1kx`79g_W6+Q-+m= znUPVCnU$HDkx_}6m5G^=QG=O<k(rT`opm$gfxrBW!khn}XBAk^BETrHoW%h|C@>0a PW_j>eemkQ9<9~htatrUP diff --git a/templates/admin/index.html b/templates/admin/index.html index c361a89..97951f0 100644 --- a/templates/admin/index.html +++ b/templates/admin/index.html @@ -4,9 +4,9 @@ <div class="container"> <div class="row"> <div class="col-sm-10 col-sm-offset-1"> - <h1>Digitale Methoden WiSo-Forschungslabor</h1> + <h1>Digital methods WiSo-Forschungslabor</h1> <p class="lead"> - Weitere Infos zum Projekt finden sich <a href="https://www.wiso.uni-hamburg.de/forschung/forschungslabor/aktuelleprojekte/digitale-methoden.html" target="_blank">hier</a> + For more information, refer to <a href="https://www.wiso.uni-hamburg.de/forschung/forschungslabor/aktuelleprojekte/digitale-methoden.html" target="_blank">the project website</a>. </p> <!--<a class="btn btn-primary" href="/"><i class="glyphicon glyphicon-chevron-left"></i> Back</a>--> </div> diff --git a/templates/export/MethodsList.jinja2 b/templates/export/MethodsList.jinja2 index 701d368..78ac8da 100644 --- a/templates/export/MethodsList.jinja2 +++ b/templates/export/MethodsList.jinja2 @@ -5,6 +5,16 @@ :sectnumlevels: 8 {% for method in methods %} -{% for l in range(method.level+1) %}={% endfor %} {{ method.name }} + +{% for l in range(method.level+1) %}={% endfor %} {{ method.name }}{% if method.level==0 %} + +--- +{% endif %} {{method.description}} +{% endfor %} + +[bibliography] +== References +{% for reference in references %} +- [[[{{ reference.name }}]]] {{ reference.cited }} {% endfor %} \ No newline at end of file -- GitLab