# A Personalized Ontology Recommendation System to Effectively Support Ontology Development by Reuse
## 4 The Utility-Based Ontology Recommendation System
### The Ontology Evaluation Component
#### 4.1.1 The Ontology Evaluation Criteria  
(a) _The Preferred ontology domain (Domain(O)):_ a measure to what extent the user's preferred domain(s) match the domain(s) of a candidate ontology. We use Equation (1) to calculate the _Domain(O)_ for any candidate ontology \(O\). \[Domain(O)=\frac{\sum_{i=1}^{n}Domain(O,d_{i})}{n} \tag{1}\]  
Since the user can select one or many preferred domains, we use \(n\) as the number of domains preferred by the user. _Domain(O,d\({}_{i}\))_ is the ontology \(O\)'s domain score for the user's preferred domain \(d_{i}\). Given the fact that an ontology \(O\) could represent more than one domain, we calculate the ontology domain score _Domain(O, d\({}_{i}\))_ for each user's preferred domain \(d_{i}\) by aggregating the _domain_match(d\({}_{i}\), d\({}_{j}\))_ score (which is a score measuring the relative similarity between an Ontology \(O\)'s domain \(d_{j}\), and the user's preferred domain \(d_{i}\)):  
\[ \begin{array}{c}Domain(O,d_{i})=\frac{\sum_{i=1}^{m}domain\_match(d_{i},d _{j})}{m},\\ domain\_match(d_{i},d_{j})=1/2^{L(d_{i},d_{j})}\end{array}  \tag{2}\]  
where \(m\) is the number of domains represented by ontology \(O\), and \(L(d_{i}d_{j})\) is the difference in levels in the hierarchy of domains between the ontology \(O\)'s domain \(d_{j}\) and the user's preferred domain \(d_{i}\). Figure 2 shows an example of a hierarchy of domains in the biomedical and biological fields. Figure 2: BioPortal_Categories Ontology. For example, if ontology \(O\) represents the domains \"_Anatomy_, _Mouse Anatomy_, and _Animal Development_\", and the user's preferred domain is \"_Anatomy_\", then the system calculates the preferred ontology domain score as follows: it first calculates the _domain-match(\(d_{i}\), \(d_{j}\))_ between the user's preferred domain \"_Anatomy_\", and every domain represented by ontology \(O\) (i.e., \"_Anatomy_, _Mouse Anatomy_, and _Animal Development_\"). Then, the system divides it by the number of ontology \(O\) domains using Equation (2). * When ontology \(O\)'s domain is \"_Anatomy_\", and the user's preferred domain is \"_Anatomy_\", the two domains match exactly, and \(L(d_{i}d_{j})\) = 0 and _domain-match(Anatomy, Anatomy)_ = 1. * When ontology \(O\)'s domain is \"_Mouse Anatomy_\", and the user's preferred domain is \"_Anatomy_\", where the \"_Mouse Anatomy_\" domain is a direct sub-domain of the \"_Anatomy_\" domain (see Figure 2), then, \(L(d_{i}d_{j})\) = 1 and _domain-match(Anatomy, Mouse Anatomy)_ = 0.5. * When ontology \(O\)'s domain is \"_Animal Development_\", and the user's preferred domain is \"_Anatomy_\", the two domains do not have a match. Then, _domain-match(Anatomy, Animal Development)_ = 0. * Since the number of the user's preferred domains is 1 then, \(Domain(O)=\frac{\sum_{i=1}^{3}Domain(o,d_{i})}{3}\) = \((1+0.5+0)/3=1.5/3=1/2\). (b) _The Ontology popularity (Pop(O))_: a measure of how popular an ontology \(O\) is within the community that uses it. To quantify the popularity of ontology \(O\), we consider both the number of visits and the number of projects that use ontology \(O\). The popularity score \(Pop(O)\) is the aggregation of both the normalized ontology visits and ontology project scores. It is calculated using Equation (3). \[Pop(O)=\left(\frac{No.\ of\ visits\ for\ ontology\ (O)}{Max\ no.\ of\ visits\ for\ an\ ontology}+\frac{No.\ of\ Projects\ for\ ontology\ (O)}{Max\ no.\ of\ projects\ for\ an\ ontology}\right)/2 \tag{3}\]  
(c) _The Input coverage (Cover(\(O_{in}\), \(O\)))_: a measure to assess how well the input keywords (i.e., the labels of the input ontology concepts) are covered in a candidate ontology \(O\). We use the label of each concept in the input ontology \(O_{in}\) as an input keyword \(i\) and examine the lexical match between this label and the labels of the concepts in candidate ontology \(O\). The lexical match function (_lexical_match(\(i\), \(O\))_) gives \"1\" or \"0.5\" if the input keyword \(i\) has an exact or partial match with the concept's label from the ontology \(O\), respectively.