## 2 Materials and Methods
### Data Collection and Processing
#### 2.1.4 Text Processing  
Although GitHub has allowed users to attach topics as labels of the repositories since 2017, only a small fraction of them have topics. Specifically, only 6.6% (982/14,971) of the collected repositories have topic labels. Therefore, we utilized keywords extracted from a repository description as labels. Keywords extracted from the description presented an insightful indication into a repository. An external API, namely IBM Watson Natural Language Understanding [23], was requested to process the descriptions, which yielded a list of informative keywords for each repository.  
Nevertheless, the extracted keywords could not be directly added as labels because a large number of keywords had semantically similar forms. Examples included \"patients' data\" versus \"patients' information\", \"medical appointments\" versus \"doctor appointments\", and \"diabetes patients\" versus \"diabetic patients\". To address this semantic issue, we employed a normalization process in which semantically similar keywords were combined. The process consisted of three steps: (1) Calculating the semantic similarity between keyword pairs, (2) labeling keyword pairs based on their similarity, and (3) replacing keywords with their semantically similar keywords.  
\begin{table}
\begin{tabular}{p{85.4 pt} p{113.8 pt} p{113.8 pt}} \hline \hline
**Data Type** & **Data Extracted** & **Description** \\ \hline Textual & Description & A brief explanation of what a repository does, what it is for, and other items. \\ \hline  & README files & A README file summarizes the most important aspects of your project. It generally includes project name, description, table of contents, installation, usage, contributors, credits, and license. \\ \hline  & Languages & Programming languages of the source codes \\ \hline  & Owner type & Two types of owners exist: Organization and individual developers. \\ \hline  & Owner location & Location of an owner. \\ \hline Numerical & Stargazers & Stargazers refers to the number of times a repository is bookmarked. It reflects an approximate level of interest in the repository. \\ \hline  & Forks & A fork is a copy of a repository. Forking is necessary for developers to contribute a project. Forks refers to the number of forks. \\ \hline  & Contributors & The number of contributors who have worked for a repository. \\ \hline  & Commits & The total number of commits. \\ \hline  & Created date & The date that a repository was created. \\ \hline  & Updated date & The latest date that a repository was updated. \\ \hline  & Issues & Issues is the number of open issues in a repository. \\ \hline  & Size of source codes & The size is valued as the size of the whole repository (including all of its history), in KB. \\ \hline  & Size of README file & The size of the README file of a repository, in B. \\ \hline \hline \end{tabular}
\end{table}
Table 1: Data extracted from GitHub REST API v3.  
To calculate the semantic similarity, this paper utilized Word2 Vec [24] to represent keywords. Word2 Vec is an unsupervised algorithm developed by Google that tries to learn meaningful vector representations of words from a dataset of text [24]. It does so based on the distributional hypothesis, which states that words that appear in the same context probably have a similar meaning. With Word2 Vec, each keyword becomes a word vector that is compared to other keyword vectors to generate a similarity score. Based on their similarity, we divided keyword pairs into two groups, equal and tag. The threshold of the similarity score was 0.85. Keywords with a similarity score greater than or equal to 0.85 were considered as an equal keyword pair. Otherwise, they were a taggable pair. For equal keyword pairs, we replaced one of the keywords, the less frequent one, to replace the other. The \"tag\" meant that the more frequent keyword was added as a tag to the other. Table 2 shows some prominent examples of these keyword pairs.