# Making Sense of Language Signals for Monitoring Radicalization
## 4 Methods
### Software Architecture and Components
In this way, analysis modules can be easily reused. This module also encompasses data preprocessing, which includes the necessary normalization and adaptation operations over the captured data. It performs two main processes: (i) NLP pre-processing and (ii) geolocation of social network posts. The pre-processing steps are implemented using the gsitk [72] library, which provides functionalities to parse and pre-process different types of texts, including Twitter posts. Regarding the geolocation of messages, the Google Geocode API [73] translates the location information to its geographic coordinates. Even though Twitter provides this type of information if the user permits them to do so, in practice, about 2% of the total tweets have their geographic coordinates publicly available [74]. It is more common for Twitter users to provide a fixed location in their user profiles. Although this is not an accurate measure for every tweet, this location information helps estimate which ideologies are more active in a specific region. Analyzing the extracted textual data to enrich it, gain further insights, and discover patterns is crucial for the presented intelligent system. To achieve such analysis, the presented system uses Senpy [53], a framework to develop, integrate, and evaluate web services for text analysis. The text analyses performed in this module extracted emotional, psychological, and moral information from the text (for a detailed explanation of these linguistic analyses, please consult Section 4.3). For extracting such annotations, we use the (i) LIWC dictionary and the (ii) Moral Foundations Dictionary (MFD). This module implements these processes using Senpy plugins, which are modular software additions that can be inserted into the system to enhance its functionality. The representation of these data is done using semantic annotations, as discussed in Section 3. Once the analysis scores are computed in each text, the data are aggregated by ideology and narrative, although the system retains the original measures. The _Storage_ module is responsible for storing data in a NoSQL database. We have selected ElasticSearch [75], since it provides scalability, text search, and a RESTful server based on a Query DSL language. We use a subset (or dialect) of JSON, JSON-LD [76], which adds a semantic annotation to plain JSON objects to retain semantics. The system also stores the semantic data into Fuseki's SPARQL endpoint [77]. As a SPARQL endpoint, Fuseki can be accessed using semantic queries. The _Visualization_ module enables building dashboards and executing semantic queries. Visualization is based on Kibana [78], on top of which, an array of components have been configured to enable faceted search. The dashboard provides an interface where users can apply filters and understand the analysis. It has different filtering and visualization functionalities. For example, users can use filters or click on elements within a visualization to display charts with particular inputs. In addition, the Apache Fuseki [77] interface is exploited to allow users to perform SPARQL queries, thereby enabling complex searches.