├── src ├── test │ └── resources │ │ └── .gitkeep └── main │ ├── resources │ ├── models │ │ └── ORNL-perceptron.bin │ ├── dictionaries │ │ ├── token_label_map.ser │ │ ├── relevant_terms.txt │ │ └── operating_systems.json │ └── entity_labels.txt │ └── java │ └── gov │ └── ornl │ └── stucco │ ├── entity │ ├── models │ │ ├── CyberEntityMention.java │ │ ├── CyberEntityType.java │ │ └── Context.java │ ├── EntityLabeler.java │ ├── CyberEntityAnnotator.java │ └── heuristics │ │ ├── CyberHeuristicAnnotator.java │ │ ├── models │ │ └── RegexContext.java │ │ └── RegexHeuristicLabeler.java │ └── heurstics │ └── utils │ ├── FreebaseEntry.java │ ├── FreebaseList.java │ ├── ListLoader.java │ └── TokenCyberLabelMap.java ├── .gitignore ├── .settings ├── org.eclipse.m2e.core.prefs └── org.eclipse.jdt.core.prefs ├── .travis.yml ├── .project ├── LICENSE ├── .classpath ├── pom.xml └── README.md /src/test/resources/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | *.DS_Store 3 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /src/main/resources/models/ORNL-perceptron.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stucco/entity-extractor/HEAD/src/main/resources/models/ORNL-perceptron.bin -------------------------------------------------------------------------------- /src/main/resources/dictionaries/token_label_map.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stucco/entity-extractor/HEAD/src/main/resources/dictionaries/token_label_map.ser -------------------------------------------------------------------------------- /src/main/resources/entity_labels.txt: -------------------------------------------------------------------------------- 1 | * Software 2 | Product 3 | Vendor 4 | Version 5 | * File 6 | Name 7 | * Function 8 | Name 9 | * Vulnerability 10 | Description 11 | Name 12 | CVE 13 | MS -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | jdk: 3 | - oraclejdk7 4 | - openjdk7 5 | - oraclejdk8 6 | after_success: 7 | - wget https://raw.githubusercontent.com/stucco/test/master/rerun-test.sh 8 | - chmod a+x ./rerun-test.sh 9 | - ./rerun-test.sh -------------------------------------------------------------------------------- /.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 3 | org.eclipse.jdt.core.compiler.compliance=1.7 4 | org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning 5 | org.eclipse.jdt.core.compiler.source=1.7 6 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | entity-extractor 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/entity/models/CyberEntityMention.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.entity.models; 2 | 3 | import edu.stanford.nlp.ie.machinereading.structure.EntityMention; 4 | import edu.stanford.nlp.ie.machinereading.structure.Span; 5 | import edu.stanford.nlp.util.CoreMap; 6 | 7 | public class CyberEntityMention extends EntityMention { 8 | 9 | private static final long serialVersionUID = 1L; 10 | 11 | public CyberEntityMention(String objectId, CoreMap sentence, Span extentSpan, Span headSpan, String type, String subtype, String mentionType) { 12 | super(objectId, sentence, extentSpan, headSpan, type, subtype, mentionType); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This software is freely distributable under the terms of the MIT License. 2 | 3 | Copyright (c) UT-Battelle, LLC (the "Original Author") 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS, THE U.S. GOVERNMENT, OR UT-BATTELLE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/entity/models/CyberEntityType.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.entity.models; 2 | 3 | import java.io.Serializable; 4 | 5 | public class CyberEntityType implements Serializable { 6 | 7 | private static final long serialVersionUID = 2L; 8 | private String cyberType; 9 | private String cyberSubType; 10 | 11 | public CyberEntityType() { 12 | this("O", "O"); 13 | } 14 | 15 | public CyberEntityType(String type, String subType) { 16 | this.cyberType = type; 17 | this.cyberSubType = subType; 18 | } 19 | 20 | public String getCyberType() { 21 | return cyberType; 22 | } 23 | 24 | public void setCyberType(String cyberType) { 25 | this.cyberType = cyberType; 26 | } 27 | 28 | public String getCyberSubType() { 29 | return cyberSubType; 30 | } 31 | 32 | public void setCyberSubType(String cyberSubType) { 33 | this.cyberSubType = cyberSubType; 34 | } 35 | 36 | @Override 37 | public String toString() { 38 | if (cyberType.equalsIgnoreCase("O")) { 39 | return cyberType; 40 | } 41 | return cyberType + "." + cyberSubType; 42 | } 43 | 44 | @Override 45 | public int hashCode() { 46 | final int prime = 31; 47 | int result = 1; 48 | result = prime * result 49 | + ((cyberSubType == null) ? 0 : cyberSubType.hashCode()); 50 | result = prime * result 51 | + ((cyberType == null) ? 0 : cyberType.hashCode()); 52 | return result; 53 | } 54 | 55 | @Override 56 | public boolean equals(Object obj) { 57 | if (this == obj) 58 | return true; 59 | if (obj == null) 60 | return false; 61 | if (getClass() != obj.getClass()) 62 | return false; 63 | CyberEntityType other = (CyberEntityType) obj; 64 | if (cyberSubType == null) { 65 | if (other.cyberSubType != null) 66 | return false; 67 | } else if (!cyberSubType.equals(other.cyberSubType)) 68 | return false; 69 | if (cyberType == null) { 70 | if (other.cyberType != null) 71 | return false; 72 | } else if (!cyberType.equals(other.cyberType)) 73 | return false; 74 | return true; 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/heurstics/utils/FreebaseEntry.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.heurstics.utils; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | import com.fasterxml.jackson.annotation.JsonGetter; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.fasterxml.jackson.annotation.JsonSetter; 9 | 10 | public class FreebaseEntry implements Serializable { 11 | private static final long serialVersionUID = 1L; 12 | 13 | @JsonProperty("name") 14 | private String name; 15 | 16 | @JsonProperty("/common/topic/alias") 17 | private List aliases; 18 | 19 | @JsonGetter("name") 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | @JsonSetter("name") 25 | public void setName(String name) { 26 | this.name = name; 27 | } 28 | 29 | @JsonGetter("/common/topic/alias") 30 | public List getAliases() { 31 | return aliases; 32 | } 33 | 34 | @JsonSetter("/common/topic/alias") 35 | public void setAliases(List aliases) { 36 | this.aliases = aliases; 37 | } 38 | 39 | public void addAlias(String newAlias) { 40 | this.aliases.add(newAlias); 41 | } 42 | 43 | public boolean contains(String value) { 44 | 45 | if (value.equals((String)name)) { 46 | return true; 47 | } 48 | else if (aliases.contains(value)) { 49 | return true; 50 | } 51 | 52 | return false; 53 | } 54 | 55 | @Override 56 | public String toString() { 57 | return "FreebaseEntry [name=" + name + ", aliases=" + aliases + "]\n"; 58 | } 59 | 60 | @Override 61 | public int hashCode() { 62 | final int prime = 31; 63 | int result = 1; 64 | result = prime * result + ((aliases == null) ? 0 : aliases.hashCode()); 65 | result = prime * result + ((name == null) ? 0 : name.hashCode()); 66 | return result; 67 | } 68 | 69 | @Override 70 | public boolean equals(Object obj) { 71 | if (this == obj) 72 | return true; 73 | if (obj == null) 74 | return false; 75 | if (getClass() != obj.getClass()) 76 | return false; 77 | FreebaseEntry other = (FreebaseEntry) obj; 78 | if (aliases == null) { 79 | if (other.aliases != null) 80 | return false; 81 | } else if (!aliases.equals(other.aliases)) 82 | return false; 83 | if (name == null) { 84 | if (other.name != null) 85 | return false; 86 | } else if (!name.equals(other.name)) 87 | return false; 88 | return true; 89 | } 90 | 91 | 92 | 93 | } 94 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/heurstics/utils/FreebaseList.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.heurstics.utils; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | import com.fasterxml.jackson.annotation.JsonGetter; 7 | import com.fasterxml.jackson.annotation.JsonIgnore; 8 | import com.fasterxml.jackson.annotation.JsonProperty; 9 | import com.fasterxml.jackson.annotation.JsonSetter; 10 | 11 | public class FreebaseList implements Serializable { 12 | private static final long serialVersionUID = 1L; 13 | 14 | @JsonProperty("result") 15 | private List entries; 16 | 17 | @JsonIgnore 18 | private String listType; 19 | 20 | @JsonGetter("result") 21 | public List getEntries() { 22 | return entries; 23 | } 24 | 25 | @JsonSetter("result") 26 | public void setEntries(List entries) { 27 | this.entries = entries; 28 | } 29 | 30 | public void addEntries(FreebaseList anotherList) { 31 | List otherEntries = anotherList.getEntries(); 32 | this.entries.addAll(otherEntries); 33 | } 34 | 35 | public String getListType() { 36 | return listType; 37 | } 38 | 39 | public void setListType(String listType) { 40 | this.listType = listType; 41 | } 42 | 43 | public boolean contains(String value) { 44 | for (FreebaseEntry entry : this.entries) { 45 | if (entry.contains(value)) { 46 | return true; 47 | } 48 | } 49 | 50 | return false; 51 | } 52 | 53 | @Override 54 | public String toString() { 55 | return this.listType + ": " + entries; 56 | } 57 | 58 | @Override 59 | public int hashCode() { 60 | final int prime = 31; 61 | int result = 1; 62 | result = prime * result + ((entries == null) ? 0 : entries.hashCode()); 63 | result = prime * result 64 | + ((listType == null) ? 0 : listType.hashCode()); 65 | return result; 66 | } 67 | 68 | @Override 69 | public boolean equals(Object obj) { 70 | if (this == obj) 71 | return true; 72 | if (obj == null) 73 | return false; 74 | if (getClass() != obj.getClass()) 75 | return false; 76 | FreebaseList other = (FreebaseList) obj; 77 | if (entries == null) { 78 | if (other.entries != null) 79 | return false; 80 | } else if (!entries.equals(other.entries)) 81 | return false; 82 | if (listType == null) { 83 | if (other.listType != null) 84 | return false; 85 | } else if (!listType.equals(other.listType)) 86 | return false; 87 | return true; 88 | } 89 | 90 | 91 | 92 | } 93 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/heurstics/utils/ListLoader.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.heurstics.utils; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.File; 5 | import java.io.FileInputStream; 6 | import java.io.FileNotFoundException; 7 | import java.io.FileReader; 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | import java.io.InputStreamReader; 11 | import java.util.HashSet; 12 | import java.util.Set; 13 | 14 | import com.fasterxml.jackson.databind.DeserializationFeature; 15 | import com.fasterxml.jackson.databind.ObjectMapper; 16 | 17 | public class ListLoader { 18 | private static ObjectMapper mapper = new ObjectMapper(); 19 | 20 | public static FreebaseList loadFreebaseList(String listFile, String listType) { 21 | mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 22 | mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false); 23 | mapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, true); 24 | 25 | FreebaseList freebaseList = null; 26 | try { 27 | InputStream inputStream = ListLoader.class.getClassLoader().getResourceAsStream(listFile); 28 | freebaseList = mapper.readValue(inputStream, FreebaseList.class); 29 | freebaseList.setListType(listType); 30 | } catch (Exception ex) { 31 | try { 32 | InputStream inputStream = new FileInputStream(new File(listFile)); 33 | freebaseList = mapper.readValue(inputStream, FreebaseList.class); 34 | freebaseList.setListType(listType); 35 | } catch (Exception e) { 36 | e.printStackTrace(); 37 | } 38 | } 39 | 40 | return freebaseList; 41 | } 42 | 43 | public static Set loadTextList(String textFile) { 44 | Set textList = new HashSet(); 45 | try { 46 | BufferedReader reader = new BufferedReader(new InputStreamReader(ListLoader.class.getClassLoader().getResourceAsStream(textFile))); 47 | String term = reader.readLine(); 48 | while (term != null) { 49 | textList.add(term); 50 | term = reader.readLine(); 51 | } 52 | reader.close(); 53 | } catch (Exception ex) { 54 | try { 55 | BufferedReader reader = new BufferedReader(new FileReader(new File(textFile))); 56 | String term = reader.readLine(); 57 | while (term != null) { 58 | textList.add(term); 59 | term = reader.readLine(); 60 | } 61 | reader.close(); 62 | } catch (Exception e) { 63 | e.printStackTrace(); 64 | } 65 | } 66 | 67 | return textList; 68 | } 69 | 70 | 71 | public static void main(String[] args) { 72 | // FreebaseList freebaseList = ListLoader.loadFreebaseList("src/main/resources/lists/software_info.json","software"); 73 | // System.out.println(freebaseList.toString()); 74 | Set relTerms = ListLoader.loadTextList("src/main/resources/lists/relevant_terms.txt"); 75 | System.out.println(relTerms); 76 | } 77 | 78 | } 79 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4.0.0 3 | gov.ornl.stucco 4 | entity-extractor 5 | 1.0.0 6 | 7 | UTF-8 8 | true 9 | gov.ornl.stucco.entity.EntityLabeler 10 | 11 | 12 | 13 | edu.stanford.nlp 14 | stanford-corenlp 15 | 3.4.1 16 | 17 | 18 | edu.stanford.nlp 19 | stanford-corenlp 20 | 3.4.1 21 | models 22 | 23 | 24 | org.apache.opennlp 25 | opennlp-tools 26 | 1.6.0 27 | 28 | 29 | com.fasterxml.jackson.core 30 | jackson-databind 31 | 2.7.0 32 | 33 | 34 | junit 35 | junit 36 | 4.8.1 37 | test 38 | 39 | 40 | 41 | 42 | 43 | src/main/resources 44 | 45 | models/ORNL-perceptron.bin 46 | dictionaries/operating_systems.json 47 | dictionaries/relevant_terms.txt 48 | dictionaries/software_developers.json 49 | dictionaries/software_info.json 50 | dictionaries/token_label_map.ser 51 | 52 | 53 | 54 | 55 | 56 | org.apache.maven.plugins 57 | maven-compiler-plugin 58 | 3.1 59 | 60 | 1.7 61 | 1.7 62 | true 63 | true 64 | true 65 | 66 | 67 | 68 | compile 69 | 70 | compile 71 | 72 | 73 | 74 | 75 | 76 | org.codehaus.mojo 77 | exec-maven-plugin 78 | 1.2.1 79 | 80 | 81 | 82 | exec 83 | 84 | 85 | 86 | 87 | java 88 | true 89 | false 90 | compile 91 | ${main.class} 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/entity/EntityLabeler.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.entity; 2 | 3 | import java.util.List; 4 | import java.util.Properties; 5 | 6 | import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation; 7 | import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation; 8 | import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation; 9 | import edu.stanford.nlp.ling.CoreLabel; 10 | import edu.stanford.nlp.pipeline.Annotation; 11 | import edu.stanford.nlp.pipeline.StanfordCoreNLP; 12 | import edu.stanford.nlp.trees.TreeCoreAnnotations.TreeAnnotation; 13 | import edu.stanford.nlp.util.CoreMap; 14 | import gov.ornl.stucco.entity.CyberEntityAnnotator.CyberAnnotation; 15 | import gov.ornl.stucco.entity.CyberEntityAnnotator.CyberEntityMentionsAnnotation; 16 | 17 | public class EntityLabeler { 18 | 19 | private StanfordCoreNLP pipeline; 20 | private Properties nlpProps; 21 | private Annotation annotatedDoc; 22 | 23 | public EntityLabeler() { 24 | nlpProps = new Properties(); 25 | this.setProperties(); 26 | pipeline = new StanfordCoreNLP(this.nlpProps); 27 | } 28 | 29 | 30 | public EntityLabeler(Properties nlpProps) { 31 | this.nlpProps = nlpProps; 32 | pipeline = new StanfordCoreNLP(this.nlpProps); 33 | } 34 | 35 | 36 | private void setProperties() { 37 | nlpProps.setProperty("customAnnotatorClass.cyberentity", "gov.ornl.stucco.entity.CyberEntityAnnotator"); 38 | nlpProps.setProperty("customAnnotatorClass.cyberheuristics", "gov.ornl.stucco.entity.heuristics.CyberHeuristicAnnotator"); 39 | nlpProps.setProperty("annotators", "tokenize, ssplit, pos, cyberheuristics, cyberentity, lemma, ner, parse"); 40 | } 41 | 42 | 43 | public Annotation getAnnotatedDoc(String title, String docText) { 44 | System.err.println("Annotating '" + title + "'..."); 45 | annotatedDoc = new Annotation(docText); 46 | pipeline.annotate(annotatedDoc); 47 | return annotatedDoc; 48 | } 49 | 50 | 51 | public static void main(String[] args) { 52 | // String exampleText = "The software developer who inserted a major security flaw into OpenSSL 1.2.4.8, using the file foo/bar/blah.php has said the error was \"quite trivial\" despite the severity of its impact, according to a new report. The Sydney Morning Herald published an interview today with Robin Seggelmann, who added the flawed code to OpenSSL, the world's most popular library for implementing HTTPS encryption in websites, e-mail servers, and applications. The flaw can expose user passwords and potentially the private key used in a website's cryptographic certificate (whether private keys are at risk is still being determined). This is a new paragraph about Apache Tomcat's latest update 7.0.1."; 53 | String exampleText = "Microsoft Windows 7 before SP1 has Sun Java cross-site scripting vulnerability Java SE in file.php (refer to CVE-2014-1234)."; 54 | // String exampleText = "Oracle DBRM has vulnerability in ABCD plug-in via abcd.1234 (found on abcd.com)."; 55 | EntityLabeler labeler = new EntityLabeler(); 56 | Annotation doc = labeler.getAnnotatedDoc("My Doc", exampleText); 57 | 58 | List sentences = doc.get(SentencesAnnotation.class); 59 | for ( CoreMap sentence : sentences) { 60 | for ( CoreLabel token : sentence.get(TokensAnnotation.class)) { 61 | System.out.println(token.get(TextAnnotation.class) + "\t" + token.get(CyberAnnotation.class)); 62 | } 63 | 64 | System.out.println("Entities:\n" + sentence.get(CyberEntityMentionsAnnotation.class)); 65 | 66 | System.out.println("Parse Tree:\n" + sentence.get(TreeAnnotation.class)); 67 | } 68 | 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /src/main/resources/dictionaries/relevant_terms.txt: -------------------------------------------------------------------------------- 1 | MITM 2 | csrf 3 | xss 4 | CSRF 5 | Use-after-free 6 | XSS 7 | 0day 8 | access 9 | account 10 | application 11 | arbitrary 12 | attack 13 | attacks 14 | attacked 15 | attacker 16 | attackers 17 | authenticate 18 | authenticated 19 | authentication 20 | authorization 21 | blocked 22 | brute-force 23 | bypass 24 | cleartext 25 | commands 26 | configuration 27 | crash 28 | credentials 29 | csrf 30 | ddos 31 | decrypt 32 | decrypted 33 | denial 34 | encrypt 35 | encrypted 36 | encryption 37 | execute 38 | exploit 39 | exposure 40 | fingerprinting 41 | forgery 42 | gain 43 | handlers 44 | hijack 45 | hook 46 | hook-handler 47 | HTTPS 48 | inject 49 | kernel 50 | kernel-mode 51 | local 52 | locale 53 | malware 54 | man-in-the-middle 55 | memory 56 | metacharacters 57 | overflow 58 | overflows 59 | overwrite 60 | password 61 | permission 62 | permissions 63 | plaintext 64 | privileges 65 | remote 66 | requests 67 | scripting 68 | sensitive 69 | signature-based 70 | signedness 71 | SSL 72 | symlink 73 | TLS 74 | truncation 75 | underflow 76 | underflows 77 | user-space 78 | xss 79 | zero-day 80 | integer underflow 81 | Integer underflows 82 | Race condition 83 | SQL commands 84 | SQL injection 85 | Use-after-free vulnerability 86 | access control 87 | access restrictions 88 | application crash 89 | arbitrary Javascript 90 | arbitrary SQL 91 | arbitrary certificate 92 | arbitrary code 93 | arbitrary files 94 | arbitrary password 95 | authentication issues 96 | buffer error 97 | buffer overflow 98 | buffer overrun 99 | bypass authentication 100 | code injection 101 | complete control 102 | credentials management 103 | cross-site forgery 104 | cross-site request 105 | cross-site scripting 106 | cryptographic issues 107 | denial-of-service attack 108 | design error 109 | design errors 110 | dot dot 111 | finger printing 112 | format string 113 | gain privileges 114 | hard links 115 | infinite loop 116 | infinite loops 117 | information disclosure 118 | information leak 119 | inject code 120 | injection vulnerability 121 | input validation 122 | integer overflow 123 | key disclosure 124 | link following 125 | local users 126 | memory exhaustion 127 | memory leak 128 | memory leaks 129 | memory pressure 130 | modify query 131 | numeric error 132 | numeric errors 133 | path traversal 134 | potentially sensitive 135 | race condition 136 | race conditions 137 | remote attacker 138 | remote attackers 139 | replay attack 140 | resource management 141 | segmentation fault 142 | sensitive information 143 | sql injection 144 | symbolic links 145 | symlink attack 146 | transport layer security 147 | traversal vulnerability 148 | weak key 149 | web script 150 | Directory traversal vulnerability 151 | Multiple cross-site request 152 | SQL injection vulnerabilities 153 | SQL injection vulnerability 154 | arbitrary Javascript code 155 | arbitrary PHP code 156 | arbitrary SQL commands 157 | arbitrary web script 158 | buffer boundary error 159 | cross site request 160 | cross site scripting 161 | cross site forgery 162 | cross-site request forgery 163 | denial of service 164 | elevation of privilege 165 | execute arbitrary SQL 166 | execute arbitrary code 167 | execute arbitrary commands 168 | execute Javascript code 169 | format string specifiers 170 | format string vulnerability 171 | gain administrative access 172 | hijack the authentication 173 | inject arbitrary code 174 | modify query logic 175 | obtain sensitive information 176 | os command injection 177 | remote authenticated users 178 | remote code execution 179 | resource management error 180 | resource management errors 181 | security feature bypass 182 | distributed denial of service 183 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/heurstics/utils/TokenCyberLabelMap.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.heurstics.utils; 2 | 3 | import gov.ornl.stucco.entity.heuristics.CyberHeuristicAnnotator; 4 | import gov.ornl.stucco.entity.models.CyberEntityType; 5 | 6 | import java.io.FileInputStream; 7 | import java.io.FileOutputStream; 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | import java.io.ObjectInputStream; 11 | import java.io.ObjectOutputStream; 12 | import java.io.Serializable; 13 | import java.util.HashMap; 14 | import java.util.Map; 15 | 16 | /** 17 | * This class will store a map of tokens (i.e. words) 18 | * to a unique cyber label, if during training, every instance 19 | * of the token had only one ground-truth label. 20 | * 21 | * @author k5y 22 | * 23 | */ 24 | public class TokenCyberLabelMap implements Serializable { 25 | 26 | private static final long serialVersionUID = 4L; 27 | 28 | private Map labelMap; 29 | 30 | public TokenCyberLabelMap() { 31 | labelMap = new HashMap(); 32 | } 33 | 34 | public Map getLabelMap() { 35 | return labelMap; 36 | } 37 | 38 | public void setLabelMap(Map labelMap) { 39 | this.labelMap = labelMap; 40 | } 41 | 42 | public void addLabel(String token, CyberEntityType label) { 43 | labelMap.put(token, label); 44 | } 45 | 46 | public boolean contains(String token) { 47 | return labelMap.containsKey(token); 48 | } 49 | 50 | public CyberEntityType getLabel(String token) { 51 | if (contains(token)) { 52 | return ((CyberEntityType)labelMap.get(token)); 53 | } 54 | return null; 55 | } 56 | 57 | public void checkLabels(String token, CyberEntityType newLabel) { 58 | CyberEntityType currentLabel = getLabel(token); 59 | if (currentLabel == null) { 60 | addLabel(token, newLabel); 61 | } 62 | else if ((currentLabel != null) && (!currentLabel.equals(newLabel))) { 63 | this.labelMap.remove(token); 64 | } 65 | } 66 | 67 | public void cleanMap() { 68 | Map tempMap = new HashMap(); 69 | tempMap.putAll(labelMap); 70 | for (String token : tempMap.keySet()) { 71 | if ((tempMap.get(token)).equals(CyberHeuristicAnnotator.O)) { 72 | this.labelMap.remove(token); 73 | } 74 | } 75 | } 76 | 77 | @SuppressWarnings("unchecked") 78 | public void loadMap(String mapFile) { 79 | try { 80 | InputStream inStream = TokenCyberLabelMap.class.getClassLoader().getResourceAsStream(mapFile); 81 | ObjectInputStream objStream = new ObjectInputStream(inStream); 82 | labelMap = ((HashMap) objStream.readObject()); 83 | objStream.close(); 84 | inStream.close(); 85 | System.err.println("Token-to-Label map loaded from '" + mapFile + "'"); 86 | } catch (Exception e) { 87 | try { 88 | FileInputStream inStream = new FileInputStream(mapFile); 89 | ObjectInputStream objStream = new ObjectInputStream(inStream); 90 | labelMap = ((HashMap) objStream.readObject()); 91 | objStream.close(); 92 | inStream.close(); 93 | System.err.println("Token-to-Label map loaded from '" + mapFile + "'"); 94 | } catch (Exception ex) { 95 | System.err.println("WARNING: Token-to-Label map could not be loaded from '" + mapFile + "'"); 96 | ex.printStackTrace(); 97 | } 98 | } 99 | } 100 | 101 | public void saveMap(String mapFile) { 102 | try { 103 | FileOutputStream outStream = new FileOutputStream(mapFile); 104 | ObjectOutputStream objStream = new ObjectOutputStream(outStream); 105 | objStream.writeObject(labelMap); 106 | objStream.close(); 107 | outStream.close(); 108 | System.err.println("Token-to-Label map saved as '" + mapFile + "'"); 109 | } catch (IOException ex) { 110 | System.err.println("WARNING: Token-to-Label map could not be saved as '" + mapFile + "'"); 111 | ex.printStackTrace(); 112 | } 113 | } 114 | 115 | @Override 116 | public String toString() { 117 | StringBuilder sb = new StringBuilder(); 118 | for (String token : this.labelMap.keySet()) { 119 | sb.append(token); 120 | sb.append("-->"); 121 | sb.append(this.labelMap.get(token)); 122 | sb.append("\n"); 123 | } 124 | return sb.toString(); 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Entity Extraction 2 | Library to identify and label cyber-domain entities from unstructured text. This library makes use of [Stanford's CoreNLP] (http://nlp.stanford.edu/software/corenlp.shtml) and [Apache's OpenNLP] (https://opennlp.apache.org) libraries. 3 | 4 | ## Entity Types 5 | * Software 6 | * Vendor 7 | * Product 8 | * Version 9 | * File 10 | * Name 11 | * Function 12 | * Name 13 | * Vulnerability 14 | * Name 15 | * Description 16 | * CVE 17 | * MS 18 | 19 | ## Input 20 | * Trained Apache OpenNLP perceptron model file in binary format that represents a cyber-domain entity model 21 | * Default CoreNLP models for tokenizing, part-of-speech tagging, sentence splitting, and parse-tree building 22 | * Text content of document to be annotated with cyber labels 23 | * Predefined heuristics, including known-entity lists and regular expressions 24 | * Mapping of tokens (i.e. words or punctuation) to a unique label, if found during training 25 | 26 | ## Process 27 | 1. Use the CoreNLP library to tokenize, part-of-speech tag, and build the parse trees of the document's text. 28 | 2. Check the tokens (i.e. words and punctuation) against lists of known entities such as Google's Freebase data sets. If the token is found, label it appropriately. 29 | 3. Attempt to match a token, or set of tokens against regular expressions. If a match is found, then label the token, or set of tokens. 30 | 4. Check token against the token-to-unique-label map and label appropriately, if found. 31 | 5. If the token is still unlabeled, generate features/context for the token, and evaluate them against the maximum entropy model (MEM) to determine the label with the highest probability. 32 | 33 | ### Features / Context Used 34 | * Token (word or punctuation to be labeled) 35 | * Prefix (first 6 characters of token) 36 | * Suffix (last 6 characters of token) 37 | * Part of speech tag 38 | * Match current token against a set of regular expressions 39 | * Match pervious token against a set of regular expressions 40 | 41 | ## Output 42 | An Annotation object that represents the document as a map, where annotator classnames are keys. The document map includes the following values: 43 | 44 | * Text: original raw text 45 | * Sentences: list of sentences 46 | * Sentence: map representing one sentence 47 | * Token: word within the sentence 48 | * POSTag: part-of-speech tag 49 | * CyberEntity: cyber domain label for the token 50 | * ParseTree: sentence structure as a tree 51 | 52 | ## Usage 53 | EntityLabeler labeler = new EntityLabeler(); 54 | Annotation doc = labeler.getAnnotatedDoc("My Doc", exampleText); 55 | 56 | List sentences = doc.get(SentencesAnnotation.class); 57 | for ( CoreMap sentence : sentences) { 58 | for ( CoreLabel token : sentence.get(TokensAnnotation.class)) { 59 | System.out.println(token.get(TextAnnotation.class) + "\t" + token.get(PartOfSpeechAnnotation.class) + "\t" + token.get(CyberAnnotation.class)); 60 | } 61 | 62 | System.out.println("Parse Tree:\n" + sentence.get(TreeAnnotation.class)); 63 | } 64 | 65 | See CoreNLP's [JavaDocs] (http://nlp.stanford.edu/nlp/javadoc/javanlp/), [Usage section] (http://nlp.stanford.edu/software/corenlp.shtml), or OpenNLP's [JavaDocs] (https://opennlp.apache.org/documentation/1.6.0/apidocs/opennlp-tools/index.html) for more information. 66 | 67 | ## License 68 | This software is freely distributable under the terms of the MIT License. 69 | 70 | Copyright (c) UT-Battelle, LLC (the "Original Author") 71 | 72 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 73 | 74 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 75 | 76 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS, THE U.S. GOVERNMENT, OR UT-BATTELLE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 77 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/entity/models/Context.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.entity.models; 2 | 3 | import java.util.EnumMap; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | import java.util.regex.Pattern; 7 | 8 | /** 9 | * Represents the context (i.e. features) of a word within a document. The context 10 | * is used to train an averaged perceptron model, as well as evaluate 11 | * a new word against the maximun entropy model. 12 | * 13 | */ 14 | public class Context { 15 | 16 | //Used as placeholders if the current word is the first or last in the sentence. 17 | public static final String START_WORD = "_START_"; 18 | public static final String END_WORD = "_END_"; 19 | 20 | //Regular expression patterns 21 | public static Map regexMap; 22 | static { 23 | regexMap = new HashMap(); 24 | regexMap.put(Predicate.REGEX_MS, Pattern.compile("MS[0-9]{2}-[0-9]{3}")); 25 | regexMap.put(Predicate.REGEX_CVE, Pattern.compile("CVE-[0-9]{4}-[0-9]{4}")); 26 | regexMap.put(Predicate.REGEX_0, Pattern.compile("^[0-9]+(\\.|x)+[0-9a-zA-Z\\-.]+$")); 27 | regexMap.put(Predicate.REGEX_1, Pattern.compile("^[0-9.x]{2,}\\.+-[0-9a-zA-Z.]+$")); 28 | regexMap.put(Predicate.REGEX_2, Pattern.compile("^[0-9.x]+\\.?[a-zA-Z.]+$")); 29 | regexMap.put(Predicate.REGEX_3, Pattern.compile("^[0-9.x]+_[a-zA-Z0-9.]+$")); 30 | regexMap.put(Predicate.REGEX_4, Pattern.compile("^[0-9.x]+\\%[0-9a-zA-Z.]+$")); 31 | regexMap.put(Predicate.REGEX_5, Pattern.compile("^[0-9.x]+-([0-9.]+[a-zA-Z0-9.\\-_]*|[a-zA-Z0-9\\-_]*[0-9.]+)$")); 32 | regexMap.put(Predicate.REGEX_1CAP, Pattern.compile("^[A-Z]{1}")); 33 | regexMap.put(Predicate.REGEX_CAP, Pattern.compile("[a-z0-9]+[A-Z]+")); 34 | regexMap.put(Predicate.REGEX_1LB, Pattern.compile("^[0-9]")); 35 | regexMap.put(Predicate.REGEX_LB, Pattern.compile("^.+[0-9]")); 36 | regexMap.put(Predicate.REGEX_PUN, Pattern.compile("[.,\\?/\\-\\[\\]'\";:!@]")); 37 | regexMap.put(Predicate.REGEX__, Pattern.compile("[a-zA-Z0-9]+_")); 38 | regexMap.put(Predicate.REGEX_LPAR, Pattern.compile("^\\(")); 39 | regexMap.put(Predicate.REGEX_RPAR, Pattern.compile("\\)$")); 40 | regexMap.put(Predicate.REGEX_RSYM, Pattern.compile("-RRB-")); 41 | regexMap.put(Predicate.REGEX_LSYM, Pattern.compile("-LRB-")); 42 | regexMap.put(Predicate.PREGEX_MS, Pattern.compile("MS[0-9]{2}-[0-9]{3}")); 43 | regexMap.put(Predicate.PREGEX_CVE, Pattern.compile("CVE-[0-9]{4}-[0-9]{4}")); 44 | regexMap.put(Predicate.PREGEX_0, Pattern.compile("^[0-9]+(\\.|x)+[0-9a-zA-Z\\-.]+$")); 45 | regexMap.put(Predicate.PREGEX_1, Pattern.compile("^[0-9.x]{2,}\\.+-[0-9a-zA-Z.]+$")); 46 | regexMap.put(Predicate.PREGEX_2, Pattern.compile("^[0-9.x]+\\.?[a-zA-Z.]+$")); 47 | regexMap.put(Predicate.PREGEX_3, Pattern.compile("^[0-9.x]+_[a-zA-Z0-9.]+$")); 48 | regexMap.put(Predicate.PREGEX_4, Pattern.compile("^[0-9.x]+\\%[0-9a-zA-Z.]+$")); 49 | regexMap.put(Predicate.PREGEX_5, Pattern.compile("^[0-9.x]+-([0-9.]+[a-zA-Z0-9.\\-_]*|[a-zA-Z0-9\\-_]*[0-9.]+)$")); 50 | regexMap.put(Predicate.PREGEX_1CAP, Pattern.compile("^[A-Z]{1}")); 51 | regexMap.put(Predicate.PREGEX_CAP, Pattern.compile("[a-z0-9]+[A-Z]+")); 52 | regexMap.put(Predicate.PREGEX_1LB, Pattern.compile("^[0-9]")); 53 | regexMap.put(Predicate.PREGEX_LB, Pattern.compile("^.+[0-9]")); 54 | regexMap.put(Predicate.PREGEX_PUN, Pattern.compile("[.,\\?/\\-\\[\\]'\";:!@]")); 55 | regexMap.put(Predicate.PREGEX__, Pattern.compile("[a-zA-Z0-9]+_")); 56 | regexMap.put(Predicate.PREGEX_LPAR, Pattern.compile("^\\(")); 57 | regexMap.put(Predicate.PREGEX_RPAR, Pattern.compile("\\)$")); 58 | regexMap.put(Predicate.PREGEX_RSYM, Pattern.compile("-RRB-")); 59 | regexMap.put(Predicate.PREGEX_LSYM, Pattern.compile("-LRB-")); 60 | } 61 | 62 | 63 | // Used to keep the context ordering consistent because order is important in OpenNLP 64 | public enum Predicate { 65 | //first 6 characters of current word 66 | PRE("prefix"), 67 | //last 6 characters of current word 68 | SUF("suffix"), 69 | //current word to be labeled 70 | W("word"), 71 | //pos tag of current word 72 | P("pos"), 73 | //current word's heuristic label 74 | HEURISTIC("heuristic-label"), 75 | //current word matches regular expressions 76 | REGEX_MS("regex-MS"), 77 | REGEX_CVE("regex-CVE"), 78 | REGEX_0("regex-0"), 79 | REGEX_1("regex-1"), 80 | REGEX_2("regex-2"), 81 | REGEX_3("regex-3"), 82 | REGEX_4("regex-4"), 83 | REGEX_5("regex-5"), 84 | REGEX_1CAP("regex-1stCap"), 85 | REGEX_CAP("regex-intCap"), 86 | REGEX_1LB("regex-1st#"), 87 | REGEX_LB("regex-int#"), 88 | REGEX_PUN("regex-punct"), 89 | REGEX__("regex-under"), 90 | REGEX_LPAR("regex-lPar"), 91 | REGEX_RPAR("regex-rPar"), 92 | REGEX_RSYM("regex-rParSy"), 93 | REGEX_LSYM("regex-lParSy"), 94 | //previous word matches regular expressions 95 | PREGEX_MS("p_regex-MS"), 96 | PREGEX_CVE("p_regex-CVE"), 97 | PREGEX_0("p_regex-0"), 98 | PREGEX_1("p_regex-1"), 99 | PREGEX_2("p_regex-2"), 100 | PREGEX_3("p_regex-3"), 101 | PREGEX_4("p_regex-4"), 102 | PREGEX_5("p_regex-5"), 103 | PREGEX_1CAP("p_regex-1stCap"), 104 | PREGEX_CAP("p_regex-intCap"), 105 | PREGEX_1LB("p_regex-1st#"), 106 | PREGEX_LB("p_regex-int#"), 107 | PREGEX_PUN("p_regex-punct"), 108 | PREGEX__("p_regex-under"), 109 | PREGEX_LPAR("p_regex-lPar"), 110 | PREGEX_RPAR("p_regex-rPar"), 111 | PREGEX_RSYM("p_regex-rParSy"), 112 | PREGEX_LSYM("p_regex-lParSy"); 113 | 114 | private String predicateLabel; 115 | 116 | private Predicate(String predicate) { 117 | this.predicateLabel = predicate; 118 | } 119 | 120 | public String getPredicateLabel() { 121 | return predicateLabel; 122 | } 123 | } 124 | 125 | private Map contextMap; 126 | 127 | /** 128 | * @param currentWord the word 129 | * @param pos the current word's pos 130 | */ 131 | public Context(String currentWord, String pos, String heuristicAnnotation, String previousWord) { 132 | contextMap = new EnumMap(Predicate.class); 133 | contextMap.put(Predicate.W, currentWord); 134 | contextMap.put(Predicate.P, pos); 135 | contextMap.put(Predicate.HEURISTIC, heuristicAnnotation); 136 | 137 | String prefix = currentWord; 138 | if (currentWord.length() >= 6) { 139 | prefix = currentWord.substring(0, 6); 140 | } 141 | contextMap.put(Predicate.PRE, prefix); 142 | 143 | String suffix = currentWord; 144 | if (currentWord.length() >= 6) { 145 | suffix = currentWord.substring(currentWord.length()-6); 146 | } 147 | contextMap.put(Predicate.SUF, suffix); 148 | 149 | //loop through regexes for current word, then previous word 150 | for (Predicate pred : Context.regexMap.keySet()) { 151 | Pattern regex = Context.regexMap.get(pred); 152 | if (pred.getPredicateLabel().startsWith("regex_")) { 153 | contextMap.put(pred, Boolean.toString(regex.matcher(currentWord).matches())); 154 | } 155 | else { 156 | contextMap.put(pred, Boolean.toString(regex.matcher(previousWord).matches())); 157 | } 158 | } 159 | } 160 | 161 | 162 | @Override 163 | public String toString() { 164 | StringBuilder sb = new StringBuilder(); 165 | 166 | for (Predicate pred : contextMap.keySet()) { 167 | sb.append(contextMap.get(pred)); 168 | sb.append(" "); 169 | } 170 | 171 | return sb.toString().trim(); 172 | } 173 | 174 | 175 | public String[] toArray() { 176 | String[] contextArray = new String[contextMap.size()]; 177 | contextArray = contextMap.values().toArray(contextArray); 178 | return contextArray; 179 | } 180 | 181 | } 182 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/entity/CyberEntityAnnotator.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.entity; 2 | 3 | import java.io.DataInputStream; 4 | import java.io.File; 5 | import java.util.ArrayList; 6 | import java.util.Collections; 7 | import java.util.HashMap; 8 | import java.util.List; 9 | import java.util.Map; 10 | import java.util.Properties; 11 | import java.util.Set; 12 | 13 | import opennlp.tools.ml.perceptron.BinaryPerceptronModelReader; 14 | import opennlp.tools.ml.perceptron.PerceptronModel; 15 | import edu.stanford.nlp.ie.machinereading.structure.Span; 16 | import edu.stanford.nlp.ling.CoreAnnotation; 17 | import edu.stanford.nlp.ling.CoreAnnotations.PartOfSpeechAnnotation; 18 | import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation; 19 | import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation; 20 | import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation; 21 | import edu.stanford.nlp.ling.CoreLabel; 22 | import edu.stanford.nlp.pipeline.Annotation; 23 | import edu.stanford.nlp.pipeline.Annotator; 24 | import edu.stanford.nlp.util.ArraySet; 25 | import edu.stanford.nlp.util.CoreMap; 26 | import edu.stanford.nlp.util.ErasureUtils; 27 | import edu.stanford.nlp.util.StringUtils; 28 | import gov.ornl.stucco.entity.heuristics.CyberHeuristicAnnotator; 29 | import gov.ornl.stucco.entity.heuristics.CyberHeuristicAnnotator.CyberHeuristicAnnotation; 30 | import gov.ornl.stucco.entity.models.Context; 31 | import gov.ornl.stucco.entity.models.CyberEntityMention; 32 | import gov.ornl.stucco.entity.models.CyberEntityType; 33 | 34 | /** 35 | * This annotator is the second cyber-related annotator in the pipeline. This annotator uses the maximum entropy model to evaluate and label the 36 | * previously-unlabeled tokens. 37 | * 38 | */ 39 | public class CyberEntityAnnotator implements Annotator { 40 | public static final String STUCCO_CYBER_ENTITY = "cyberentity"; 41 | public static final Requirement CYBER_ENTITY_REQUIREMENT = new Requirement(STUCCO_CYBER_ENTITY); 42 | 43 | private static String modelFilePath = "models/ORNL-perceptron.bin"; 44 | private String cyberModelFile; 45 | private PerceptronModel cyberModel; 46 | 47 | 48 | public CyberEntityAnnotator(String className) { 49 | this(className, StringUtils.argsToProperties("-model", modelFilePath)); 50 | } 51 | 52 | public CyberEntityAnnotator(String className, Properties config) { 53 | cyberModelFile = config.getProperty("model", modelFilePath); 54 | 55 | System.err.println("Loading model from '" + cyberModelFile + "'"); 56 | try { 57 | cyberModel = (PerceptronModel) (new BinaryPerceptronModelReader(new DataInputStream(CyberEntityAnnotator.class.getClassLoader().getResourceAsStream(cyberModelFile)))).getModel(); 58 | } catch (Exception e) { 59 | try { 60 | cyberModel = (PerceptronModel) (new BinaryPerceptronModelReader(new File(cyberModelFile))).getModel(); 61 | } catch (Exception ex) { 62 | System.err.println("Could not load cyber model from '" + cyberModelFile + "'."); 63 | ex.printStackTrace(); 64 | System.exit(1); 65 | } 66 | } 67 | } 68 | 69 | @Override 70 | public void annotate(Annotation annotation) { 71 | System.err.println("Annotating with cyber labels ... "); 72 | Map> entityMentionsMap = new HashMap>(); 73 | 74 | if (annotation.has(SentencesAnnotation.class)) { 75 | List tokens = annotation.get(TokensAnnotation.class); 76 | for (int i=0; i= 0) { 92 | previousWord = tokens.get(i-1).get(TextAnnotation.class); 93 | } 94 | Context context = new Context(word, pos, heuristicLabel.toString(), previousWord); 95 | double[] results = cyberModel.eval(context.toArray()); 96 | String cyberLabel = cyberModel.getBestOutcome(results); 97 | if (cyberLabel.contains(".")) { 98 | int index = cyberLabel.indexOf("."); 99 | String type = cyberLabel.substring(0, index); 100 | String subType = cyberLabel.substring(index + 1); 101 | label = new CyberEntityType(type, subType); 102 | } 103 | } 104 | 105 | if (label != null) { 106 | //annotate the token with the new cyber label 107 | token.set(CyberAnnotation.class, label); 108 | 109 | if (!label.equals(CyberHeuristicAnnotator.O)) { 110 | //Create new EntityMentions or add to existing one 111 | int sentenceIndex = token.sentIndex(); 112 | CoreMap sentence = annotation.get(SentencesAnnotation.class).get(sentenceIndex); 113 | //token indexing starts at 1, while span indexing starts at 0 114 | Span cyberSpan = new Span(token.index()-1, token.index()); 115 | 116 | CyberEntityMention cyberMention = new CyberEntityMention(CyberEntityMention.makeUniqueId(), sentence, cyberSpan, cyberSpan, label.getCyberType(), label.getCyberSubType(), null); 117 | 118 | //Add this EntityMentions to the list for its corresponding sentence 119 | List sentEntityList = entityMentionsMap.get(Integer.valueOf(sentenceIndex)); 120 | if (sentEntityList == null) { 121 | sentEntityList = new ArrayList(); 122 | } 123 | 124 | if (sentEntityList.size() > 1) { 125 | CyberEntityMention latestCyberMention = sentEntityList.get(sentEntityList.size()-1); 126 | if ((latestCyberMention.labelEquals(cyberMention, true)) && (cyberSpan.start() == latestCyberMention.getHeadTokenEnd())) { 127 | latestCyberMention.getHead().expandToInclude(cyberSpan); 128 | } 129 | else { 130 | sentEntityList.add(cyberMention); 131 | } 132 | } 133 | else { 134 | sentEntityList.add(cyberMention); 135 | } 136 | 137 | //update the sentence's EntityMention list 138 | entityMentionsMap.put(Integer.valueOf(sentenceIndex), sentEntityList); 139 | } 140 | } 141 | 142 | } 143 | 144 | //set the EntityMention key for the sentence 145 | for (Integer sentIndex : entityMentionsMap.keySet()) { 146 | CoreMap sentence = annotation.get(SentencesAnnotation.class).get(sentIndex.intValue()); 147 | sentence.set(CyberEntityMentionsAnnotation.class, ((List) entityMentionsMap.get(sentIndex))); 148 | } 149 | 150 | } 151 | } 152 | 153 | @Override 154 | public Set requirementsSatisfied() { 155 | return Collections.unmodifiableSet(new ArraySet(CYBER_ENTITY_REQUIREMENT)); 156 | } 157 | 158 | @Override 159 | public Set requires() { 160 | Set prerequisites = new ArraySet(); 161 | // prerequisites.addAll(Annotator.TOKENIZE_SSPLIT_POS); 162 | prerequisites.add(CyberHeuristicAnnotator.CYBER_HEURISTICS_REQUIREMENT); 163 | return Collections.unmodifiableSet(prerequisites); 164 | } 165 | 166 | /** 167 | * The CyberAnnotation key for getting the STUCCO cyber label of a token. 168 | * 169 | * This key is set on token annotations. 170 | */ 171 | public static class CyberAnnotation implements CoreAnnotation { 172 | public Class getType() { 173 | return CyberEntityType.class; 174 | } 175 | } 176 | 177 | /** 178 | * The CyberEntityAnnotation key for getting the STUCCO cyber entities of a sentence. 179 | * 180 | * This key is set on the sentence annotations. 181 | */ 182 | public static class CyberEntityMentionsAnnotation implements CoreAnnotation> { 183 | public Class> getType() { 184 | return ErasureUtils.uncheckedCast(List.class); 185 | } 186 | } 187 | 188 | } 189 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/entity/heuristics/CyberHeuristicAnnotator.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.entity.heuristics; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.List; 6 | import java.util.Properties; 7 | import java.util.Set; 8 | 9 | import edu.stanford.nlp.ling.CoreAnnotation; 10 | import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation; 11 | import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation; 12 | import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation; 13 | import edu.stanford.nlp.ling.CoreLabel; 14 | import edu.stanford.nlp.pipeline.Annotation; 15 | import edu.stanford.nlp.pipeline.Annotator; 16 | import edu.stanford.nlp.util.ArraySet; 17 | import edu.stanford.nlp.util.StringUtils; 18 | import gov.ornl.stucco.entity.models.CyberEntityType; 19 | import gov.ornl.stucco.heurstics.utils.FreebaseList; 20 | import gov.ornl.stucco.heurstics.utils.ListLoader; 21 | import gov.ornl.stucco.heurstics.utils.TokenCyberLabelMap; 22 | 23 | /** 24 | * This is the annotator in the pipeline that uses heuristics to label the cyber domain entities. 25 | * 26 | */ 27 | public class CyberHeuristicAnnotator implements Annotator { 28 | public static final String STUCCO_CYBER_HEURISTICS = "cyberheuristics"; 29 | public static final Requirement CYBER_HEURISTICS_REQUIREMENT = new Requirement(STUCCO_CYBER_HEURISTICS); 30 | 31 | public static final CyberEntityType O = new CyberEntityType(); 32 | public static final CyberEntityType SW_VENDOR = new CyberEntityType("sw", "vendor"); 33 | public static final CyberEntityType SW_PRODUCT = new CyberEntityType("sw", "product"); 34 | public static final CyberEntityType SW_VERSION = new CyberEntityType("sw", "version"); 35 | public static final CyberEntityType FILE_NAME = new CyberEntityType("file", "name"); 36 | public static final CyberEntityType FUNCTION_NAME = new CyberEntityType("function", "name"); 37 | public static final CyberEntityType VULN_MS = new CyberEntityType("vuln", "ms"); 38 | public static final CyberEntityType VULN_NAME = new CyberEntityType("vuln", "name"); 39 | public static final CyberEntityType VULN_DESC = new CyberEntityType("vuln", "description"); 40 | public static final CyberEntityType VULN_CVE = new CyberEntityType("vuln", "cve"); 41 | 42 | private static String swInfoList = "dictionaries/software_info.json"; 43 | private static String swDevList = "dictionaries/software_developers.json"; 44 | private static String osList = "dictionaries/operating_systems.json"; 45 | private static String relTermsList = "dictionaries/relevant_terms.txt"; 46 | private static String labelMapPath = "dictionaries/token_label_map.ser"; 47 | 48 | private String listFile; 49 | private FreebaseList swProductList; 50 | private FreebaseList swVendorList; 51 | private Set relevantTermsList; 52 | private TokenCyberLabelMap labelMap; 53 | private RegexHeuristicLabeler regexLabeler; 54 | 55 | 56 | public CyberHeuristicAnnotator(String className) { 57 | this(className, StringUtils.argsToProperties("-swProducts", swInfoList, "-swVendors", swDevList, "-swOS", osList, "-vulnDesc", relTermsList, "-labelMap", labelMapPath)); 58 | } 59 | 60 | public CyberHeuristicAnnotator(String className, Properties config) { 61 | listFile = config.getProperty("swProducts", swInfoList); 62 | System.err.println("Loading sw_products list from '" + listFile + "'"); 63 | swProductList = ListLoader.loadFreebaseList(listFile, SW_PRODUCT.toString()); 64 | 65 | listFile = config.getProperty("swVendors", swDevList); 66 | System.err.println("Loading sw_vendors list from '" + listFile + "'"); 67 | swVendorList = ListLoader.loadFreebaseList(listFile, SW_VENDOR.toString()); 68 | 69 | listFile = config.getProperty("swOS", osList); 70 | System.err.println("Loading sw_products (os) list from '" + listFile + "'"); 71 | FreebaseList temp = ListLoader.loadFreebaseList(listFile, SW_PRODUCT.toString()); 72 | //os names are considered software products for now, so add them to the same list 73 | if (temp != null) { 74 | swProductList.addEntries(temp); 75 | } 76 | 77 | listFile = config.getProperty("vulnDesc", relTermsList); 78 | System.err.println("Loading vuln_description list from '" + listFile + "'"); 79 | relevantTermsList = ListLoader.loadTextList(listFile); 80 | 81 | listFile = config.getProperty("labelMap", labelMapPath); 82 | labelMap = new TokenCyberLabelMap(); 83 | labelMap.loadMap(listFile); 84 | 85 | regexLabeler = new RegexHeuristicLabeler(); 86 | } 87 | 88 | @Override 89 | public void annotate(Annotation annotation) { 90 | System.err.println("Annotating with heuristic cyber labels ... "); 91 | if (annotation.has(SentencesAnnotation.class)) { 92 | //Known entities heuristics 93 | List tokens = annotation.get(TokensAnnotation.class); 94 | for (CoreLabel token : tokens) { 95 | if (swVendorList.contains(token.get(TextAnnotation.class))) { 96 | token.set(CyberHeuristicAnnotation.class, SW_VENDOR); 97 | } 98 | else if (swProductList.contains(token.get(TextAnnotation.class))) { 99 | token.set(CyberHeuristicAnnotation.class, SW_PRODUCT); 100 | } 101 | else if (relevantTermsList.contains(token.get(TextAnnotation.class))) { 102 | token.set(CyberHeuristicAnnotation.class, VULN_DESC); 103 | } 104 | else { 105 | token.set(CyberHeuristicAnnotation.class, O); 106 | } 107 | } 108 | for (int i=0; i tokenSublist = new ArrayList(); 180 | if (i == 0) { 181 | tokenSublist.add(RegexHeuristicLabeler.EMPTY_CORELABEL); 182 | tokenSublist.add(RegexHeuristicLabeler.EMPTY_CORELABEL); 183 | tokenSublist.addAll(tokens.subList(0, 5)); 184 | } 185 | else if (i == 1) { 186 | tokenSublist.add(RegexHeuristicLabeler.EMPTY_CORELABEL); 187 | tokenSublist.addAll(tokens.subList(0, 6)); 188 | } 189 | else { 190 | tokenSublist.addAll(tokens.subList(i-2, (Math.min(tokens.size(),i+5)))); 191 | if (i == tokens.size()-1) { 192 | tokenSublist.add(RegexHeuristicLabeler.EMPTY_CORELABEL); 193 | } 194 | if (i >= tokens.size()-2) { 195 | tokenSublist.add(RegexHeuristicLabeler.EMPTY_CORELABEL); 196 | } 197 | if (i >= tokens.size()-3) { 198 | tokenSublist.add(RegexHeuristicLabeler.EMPTY_CORELABEL); 199 | } 200 | if (i >= tokens.size()-4) { 201 | tokenSublist.add(RegexHeuristicLabeler.EMPTY_CORELABEL); 202 | } 203 | } 204 | regexLabeler.annotate(tokenSublist); 205 | } 206 | 207 | //Token-to-unique-label map check 208 | for (CoreLabel token : tokens) { 209 | if ((token.get(CyberHeuristicAnnotation.class).equals(O)) && (labelMap.contains(token.get(TextAnnotation.class)))) { 210 | CyberEntityType uniqueLabel = labelMap.getLabel(token.get(TextAnnotation.class)); 211 | token.set(CyberHeuristicAnnotation.class, uniqueLabel); 212 | } 213 | } 214 | } 215 | } 216 | 217 | @Override 218 | public Set requirementsSatisfied() { 219 | return Collections.unmodifiableSet(new ArraySet(CYBER_HEURISTICS_REQUIREMENT)); 220 | } 221 | 222 | @Override 223 | public Set requires() { 224 | return Annotator.TOKENIZE_SSPLIT_POS; 225 | } 226 | 227 | /** 228 | * The CyberAnnotation key for getting the STUCCO cyber label of a token. 229 | * 230 | * This key is set on token annotations. 231 | */ 232 | public static class CyberHeuristicAnnotation implements CoreAnnotation { 233 | public Class getType() { 234 | return CyberEntityType.class; 235 | } 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /src/main/java/gov/ornl/stucco/entity/heuristics/models/RegexContext.java: -------------------------------------------------------------------------------- 1 | package gov.ornl.stucco.entity.heuristics.models; 2 | 3 | import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation; 4 | import edu.stanford.nlp.ling.CoreLabel; 5 | import gov.ornl.stucco.entity.heuristics.CyberHeuristicAnnotator.CyberHeuristicAnnotation; 6 | import gov.ornl.stucco.entity.heuristics.RegexHeuristicLabeler; 7 | import gov.ornl.stucco.entity.models.CyberEntityType; 8 | 9 | import java.util.ArrayList; 10 | import java.util.HashMap; 11 | import java.util.List; 12 | import java.util.Map; 13 | import java.util.regex.Pattern; 14 | 15 | public class RegexContext { 16 | 17 | public enum WordKey { 18 | P2_Word, 19 | P_Word, 20 | Word, 21 | N_Word, 22 | N2_Word, 23 | N3_Word, 24 | N4_Word 25 | } 26 | 27 | public enum LabelKey { 28 | P2_Label, 29 | P_Label, 30 | Label, 31 | N_Label, 32 | N2_Label, 33 | N3_Label, 34 | N4_Label 35 | } 36 | 37 | // Test a single- or multiple-word phrase against multiple patterns 38 | // The list of patterns represent an OR operation (i.e. the word/phrase is considered 39 | // a match if it matches pattern0 or pattern1 etc.) 40 | // The exception to this is if there are NOT patterns involved, 41 | // then all the patterns use AND. 42 | private Map, List> wordRegexMap; 43 | // Map defining which of the pattern(s) should match and which should not 44 | // This map corresponds to wordRegexMap's Pattern list 45 | // The default is false - this is NOT a notOp; the word(s) need to match the pattern 46 | private Map, List> notOpMap; 47 | // Test a word's cyber-domain label against a pattern 48 | // All key's must match their corresponding pattern to label the set of tokens 49 | private Map labelRegexMap; 50 | // Provide the word's cyber-domain label if it matches 51 | // all these pattern criteria 52 | private Map annotationMap; 53 | 54 | public RegexContext() { 55 | this.wordRegexMap = new HashMap, List>(); 56 | this.notOpMap = new HashMap, List>(); 57 | this.labelRegexMap = new HashMap(); 58 | this.annotationMap = new HashMap(); 59 | } 60 | 61 | 62 | public Map, List> getWordRegexMap() { 63 | return wordRegexMap; 64 | } 65 | 66 | 67 | public void setWordRegexMap(Map, List> wordRegexMap) { 68 | this.wordRegexMap = wordRegexMap; 69 | setDefaultNotOpMap(); 70 | } 71 | 72 | 73 | public void addWordPatternLists(List keyList, List patternList) { 74 | this.wordRegexMap.put(keyList, patternList); 75 | setDefaultNotOpList(patternList); 76 | } 77 | 78 | 79 | public void addWordPatternList(WordKey key, List patternList) { 80 | List keyList = new ArrayList(); 81 | keyList.add(key); 82 | addWordPatternLists(keyList, patternList); 83 | } 84 | 85 | 86 | public void addWordPattern(WordKey key, Pattern pattern) { 87 | List keyList = new ArrayList(); 88 | keyList.add(key); 89 | List patternList = new ArrayList(); 90 | patternList.add(pattern); 91 | addWordPatternLists(keyList, patternList); 92 | } 93 | 94 | 95 | public void addWordListPattern(List keyList, Pattern pattern) { 96 | List patternList = new ArrayList(); 97 | patternList.add(pattern); 98 | addWordPatternLists(keyList, patternList); 99 | } 100 | 101 | 102 | public Map, List> getNotOpMap() { 103 | return notOpMap; 104 | } 105 | 106 | 107 | public void setNotOpMap(Map, List> notOpMap) { 108 | this.notOpMap = notOpMap; 109 | } 110 | 111 | 112 | public void addNotOpLists(List keyList, List notOpList) { 113 | this.notOpMap.put(this.wordRegexMap.get(keyList), notOpList); 114 | } 115 | 116 | 117 | public void addPatternLists(List keyList, List patternList, List notOpList) { 118 | this.wordRegexMap.put(keyList, patternList); 119 | this.notOpMap.put(patternList, notOpList); 120 | } 121 | 122 | 123 | public Map getLabelRegexMap() { 124 | return labelRegexMap; 125 | } 126 | 127 | 128 | public void setLabelRegexMap(Map labelRegexMap) { 129 | this.labelRegexMap = labelRegexMap; 130 | } 131 | 132 | 133 | public void addLabelRegex(LabelKey key, Pattern pattern) { 134 | this.labelRegexMap.put(key, pattern); 135 | } 136 | 137 | 138 | public Map getHeuristicLabelMap() { 139 | return annotationMap; 140 | } 141 | 142 | 143 | public void setHeuristicLabelMap(Map cyberLabelMap) { 144 | this.annotationMap = cyberLabelMap; 145 | } 146 | 147 | 148 | public void addHeuristicLabel(LabelKey key, CyberEntityType entity) { 149 | this.annotationMap.put(key, entity); 150 | } 151 | 152 | 153 | public void setDefaultNotOpList(List patternList) { 154 | List boolList = new ArrayList(); 155 | for (int i=0; i key : this.wordRegexMap.values()) { 164 | setDefaultNotOpList(key); 165 | } 166 | } 167 | 168 | 169 | public boolean evaluate(List tokens) { 170 | for (List regexKeyList : wordRegexMap.keySet()) { 171 | // obtain the index of the words to be used in this regex and gather the token instances 172 | // of the corresponding indices 173 | int low, high; 174 | low = high = regexKeyList.get(0).ordinal(); 175 | for (WordKey wk : regexKeyList) { 176 | if (wk.ordinal() < low) { 177 | low = wk.ordinal(); 178 | } 179 | if (wk.ordinal() > high) { 180 | high = wk.ordinal(); 181 | } 182 | } 183 | List sublist = tokens.subList(low, high+1); 184 | // If one of the tokens is an EMPTY_CORELABEL, 185 | // then, this regex will not match 186 | if (sublist.contains(RegexHeuristicLabeler.EMPTY_CORELABEL)) { 187 | return false; 188 | } 189 | String compareString = getPhrase(sublist); 190 | List patternList = wordRegexMap.get(regexKeyList); 191 | List notOpList = notOpMap.get(patternList); 192 | // If this list of patterns includes a NOT pattern, then 193 | // treat as AND operations between 194 | // Otherwise, treat pattern list as OR 195 | if (notOpList.contains(Boolean.TRUE)) { 196 | for (int i=0; i tokens) { 250 | for (LabelKey key : annotationMap.keySet()) { 251 | CoreLabel token = tokens.get(key.ordinal()); 252 | token.set(CyberHeuristicAnnotation.class, annotationMap.get(key)); 253 | } 254 | } 255 | 256 | 257 | private String getPhrase(List tokens) { 258 | StringBuilder sb = new StringBuilder(); 259 | for (int i=0; i patternList0 = new ArrayList() { 59 | private static final long serialVersionUID = 1L; 60 | 61 | { 62 | add(Pattern.compile("^[0-9]+(\\.|x)+[0-9a-zA-Z\\-.]{1,}$")); 63 | add(Pattern.compile("^[0-9.x]{2,}\\.+-[0-9a-zA-Z.]+$")); 64 | add(Pattern.compile("^[0-9.x]+\\.?[a-zA-Z.]+$")); 65 | add(Pattern.compile("^[0-9.x]+_[a-zA-Z0-9.]+$")); 66 | add(Pattern.compile("^[0-9.x]+\\%[0-9a-zA-Z.]+$")); 67 | add(Pattern.compile("^[0-9.x]+-([0-9.]+[a-zA-Z0-9.\\-_]*|[a-zA-Z0-9.\\-_]*[0-9.]+)$")); 68 | add(Pattern.compile("^[0-9a-z\\-_.]*\\%[0-9a-z\\-_.]+")); 69 | add(Pattern.compile("-[a-zA-Z0-9.]+$")); 70 | add(Pattern.compile("^alpha[_0-9a-zA-Z.]*")); 71 | add(Pattern.compile("^beta[_0-9a-zA-Z.]*")); 72 | add(Pattern.compile("^[A-Z]{1,3}[0-9]$")); 73 | }}; 74 | 75 | public static Pattern no_label = Pattern.compile(CyberHeuristicAnnotator.O.toString()); 76 | public static Pattern sw_product = Pattern.compile(CyberHeuristicAnnotator.SW_PRODUCT.toString()); 77 | public static Pattern sw_vendor = Pattern.compile(CyberHeuristicAnnotator.SW_VENDOR.toString()); 78 | public static Pattern sw_version = Pattern.compile(CyberHeuristicAnnotator.SW_VERSION.toString()); 79 | public static Pattern sw_file = Pattern.compile(CyberHeuristicAnnotator.FILE_NAME.toString()); 80 | public static Pattern sw_function = Pattern.compile(CyberHeuristicAnnotator.FUNCTION_NAME.toString()); 81 | public static Pattern vuln_ms = Pattern.compile(CyberHeuristicAnnotator.VULN_MS.toString()); 82 | public static Pattern vuln_cve = Pattern.compile(CyberHeuristicAnnotator.VULN_CVE.toString()); 83 | public static Pattern vuln_name = Pattern.compile(CyberHeuristicAnnotator.VULN_NAME.toString()); 84 | public static Pattern vuln_desc = Pattern.compile(CyberHeuristicAnnotator.VULN_DESC.toString()); 85 | 86 | private List regexList; 87 | 88 | public RegexHeuristicLabeler() { 89 | regexList = new ArrayList(); 90 | init(); 91 | } 92 | 93 | 94 | public void annotate(List tokenSublist) { 95 | for (RegexContext regex : regexList) { 96 | if (regex.evaluate(tokenSublist)) { 97 | break; 98 | } 99 | } 100 | } 101 | 102 | 103 | /** 104 | * Set up all the RegexContext instances and add them to the list. 105 | */ 106 | private void init() { 107 | System.err.println("Loading regular expresions ..."); 108 | // All these instances are ported from averaged_perceptron/comparison-code/preprocessing-code/regex_ad_hoc_tagger.py 109 | RegexContext regexContext = new RegexContext(); 110 | // Line 30-34 111 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 112 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_VERSION); 113 | List keyList = new ArrayList(); 114 | keyList.add(WordKey.P_Word); 115 | keyList.add(WordKey.Word); 116 | regexContext.addWordListPattern(keyList, pattern1); 117 | regexContext.addLabelRegex(LabelKey.P2_Label, sw_version); 118 | regexList.add(regexContext); 119 | 120 | regexContext = new RegexContext(); 121 | // Line 34-37 122 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 123 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_VERSION); 124 | keyList = new ArrayList(); 125 | keyList.add(WordKey.P_Word); 126 | keyList.add(WordKey.Word); 127 | regexContext.addWordListPattern(keyList, pattern1); 128 | regexContext.addLabelRegex(LabelKey.Label, no_label); 129 | regexList.add(regexContext); 130 | 131 | regexContext = new RegexContext(); 132 | // Line 39-40 133 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 134 | regexContext.addWordPattern(WordKey.Word, pattern0); 135 | regexContext.addLabelRegex(LabelKey.Label, no_label); 136 | regexContext.addLabelRegex(LabelKey.P_Label, sw_product); 137 | regexList.add(regexContext); 138 | 139 | regexContext = new RegexContext(); 140 | // Line 42-46 141 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 142 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 143 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 144 | keyList = new ArrayList(); 145 | keyList.add(WordKey.Word); 146 | keyList.add(WordKey.N_Word); 147 | keyList.add(WordKey.N2_Word); 148 | regexContext.addWordListPattern(keyList, pattern2); 149 | regexContext.addLabelRegex(LabelKey.Label, no_label); 150 | regexList.add(regexContext); 151 | 152 | regexContext = new RegexContext(); 153 | // Line 53-56 154 | regexContext.addHeuristicLabel(LabelKey.N3_Label, CyberHeuristicAnnotator.SW_VERSION); 155 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 156 | keyList = new ArrayList(); 157 | keyList.add(WordKey.N_Word); 158 | keyList.add(WordKey.N2_Word); 159 | keyList.add(WordKey.N3_Word); 160 | regexContext.addWordListPattern(keyList, pattern3); 161 | regexContext.addLabelRegex(LabelKey.Label, sw_version); 162 | regexContext.addLabelRegex(LabelKey.N3_Label, no_label); 163 | regexList.add(regexContext); 164 | 165 | regexContext = new RegexContext(); 166 | // Line 48-51 167 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 168 | keyList = new ArrayList(); 169 | keyList.add(WordKey.N_Word); 170 | keyList.add(WordKey.N2_Word); 171 | regexContext.addWordListPattern(keyList, pattern3); 172 | regexContext.addLabelRegex(LabelKey.Label, sw_version); 173 | regexContext.addLabelRegex(LabelKey.N2_Label, no_label); 174 | regexList.add(regexContext); 175 | 176 | regexContext = new RegexContext(); 177 | // Line 59-60 178 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 179 | keyList = new ArrayList(); 180 | keyList.add(WordKey.Word); 181 | keyList.add(WordKey.N_Word); 182 | regexContext.addWordListPattern(keyList, pattern5); 183 | regexContext.addLabelRegex(LabelKey.Label, no_label); 184 | regexList.add(regexContext); 185 | 186 | regexContext = new RegexContext(); 187 | // Line 67-69 188 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 189 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_VERSION); 190 | regexContext.addHeuristicLabel(LabelKey.P2_Label, CyberHeuristicAnnotator.SW_VERSION); 191 | keyList = new ArrayList(); 192 | keyList.add(WordKey.P2_Word); 193 | keyList.add(WordKey.P_Word); 194 | keyList.add(WordKey.Word); 195 | regexContext.addWordListPattern(keyList, pattern6); 196 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 197 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 198 | keyList = new ArrayList(); 199 | keyList.add(WordKey.N_Word); 200 | keyList.add(WordKey.N2_Word); 201 | regexContext.addWordListPattern(keyList, pattern7); 202 | regexList.add(regexContext); 203 | 204 | regexContext = new RegexContext(); 205 | // Line 61-66 206 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 207 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_VERSION); 208 | regexContext.addHeuristicLabel(LabelKey.P2_Label, CyberHeuristicAnnotator.SW_VERSION); 209 | keyList = new ArrayList(); 210 | keyList.add(WordKey.P2_Word); 211 | keyList.add(WordKey.P_Word); 212 | keyList.add(WordKey.Word); 213 | regexContext.addWordListPattern(keyList, pattern6); 214 | regexList.add(regexContext); 215 | 216 | regexContext = new RegexContext(); 217 | // Line 70-73 218 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 219 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_VERSION); 220 | keyList = new ArrayList(); 221 | keyList.add(WordKey.P_Word); 222 | keyList.add(WordKey.Word); 223 | regexContext.addWordListPattern(keyList, pattern6); 224 | regexList.add(regexContext); 225 | 226 | regexContext = new RegexContext(); 227 | // Line 75-76 228 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 229 | keyList = new ArrayList(); 230 | keyList.add(WordKey.Word); 231 | regexContext.addWordListPattern(keyList, pattern11); 232 | regexContext.addLabelRegex(LabelKey.P_Label, sw_product); 233 | regexList.add(regexContext); 234 | 235 | regexContext = new RegexContext(); 236 | // Line 105-117 237 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 238 | keyList = new ArrayList(); 239 | keyList.add(WordKey.Word); 240 | keyList.add(WordKey.N_Word); 241 | List patternList = new ArrayList(); 242 | patternList.add(pattern13); 243 | patternList.add(pattern14); 244 | regexContext.addWordPatternLists(keyList, patternList); 245 | regexContext.addLabelRegex(LabelKey.Label, no_label); 246 | keyList = new ArrayList(); 247 | keyList.add(WordKey.N_Word); 248 | keyList.add(WordKey.N2_Word); 249 | regexContext.addWordListPattern(keyList, pattern3); 250 | regexList.add(regexContext); 251 | 252 | regexContext = new RegexContext(); 253 | // Line 79-91 --> skipped because they are included in the patternList0 254 | // Line 92-95 & 108 & 112 255 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 256 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 257 | keyList = new ArrayList(); 258 | keyList.add(WordKey.Word); 259 | keyList.add(WordKey.N_Word); 260 | regexContext.addWordListPattern(keyList, pattern13); 261 | regexContext.addLabelRegex(LabelKey.Label, no_label); 262 | regexList.add(regexContext); 263 | 264 | regexContext = new RegexContext(); 265 | // Line 97-101 & 108 & 112 & 124-126 266 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 267 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 268 | keyList = new ArrayList(); 269 | keyList.add(WordKey.Word); 270 | keyList.add(WordKey.N_Word); 271 | regexContext.addWordListPattern(keyList, pattern14); 272 | regexList.add(regexContext); 273 | 274 | regexContext = new RegexContext(); 275 | // Line 119-123 276 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 277 | regexContext.addWordPattern(WordKey.Word, pattern16); 278 | regexList.add(regexContext); 279 | 280 | regexContext = new RegexContext(); 281 | // Line 127-136 282 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_VERSION); 283 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 284 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 285 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 286 | keyList = new ArrayList(); 287 | keyList.add(WordKey.Word); 288 | keyList.add(WordKey.N_Word); 289 | keyList.add(WordKey.N2_Word); 290 | regexContext.addWordListPattern(keyList, pattern17); 291 | regexContext.addLabelRegex(LabelKey.P2_Label, sw_version); 292 | regexList.add(regexContext); 293 | 294 | regexContext = new RegexContext(); 295 | // Line 127-133 296 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 297 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 298 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 299 | keyList = new ArrayList(); 300 | keyList.add(WordKey.Word); 301 | keyList.add(WordKey.N_Word); 302 | keyList.add(WordKey.N2_Word); 303 | regexContext.addWordListPattern(keyList, pattern17); 304 | regexContext.addLabelRegex(LabelKey.P_Label, sw_version); 305 | regexList.add(regexContext); 306 | 307 | regexContext = new RegexContext(); 308 | // Line 138-139 309 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.VULN_CVE); 310 | regexContext.addWordPattern(WordKey.Word, pattern19); 311 | regexList.add(regexContext); 312 | 313 | regexContext = new RegexContext(); 314 | // Line 143-144 315 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.VULN_MS); 316 | regexContext.addWordPattern(WordKey.Word, pattern20); 317 | regexList.add(regexContext); 318 | 319 | regexContext = new RegexContext(); 320 | // Line 169-193 & 248-258 & 269-279 321 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 322 | keyList = new ArrayList(); 323 | keyList.add(WordKey.Word); 324 | keyList.add(WordKey.N_Word); 325 | keyList.add(WordKey.N2_Word); 326 | keyList.add(WordKey.N3_Word); 327 | regexContext.addWordListPattern(keyList, pattern8); 328 | regexContext.addLabelRegex(LabelKey.N3_Label, no_label); 329 | regexList.add(regexContext); 330 | 331 | regexContext = new RegexContext(); 332 | // Line 119 - 123 333 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 334 | regexContext.addWordPattern(WordKey.Word, pattern16); 335 | regexContext.addLabelRegex(LabelKey.Label, no_label); 336 | regexList.add(regexContext); 337 | 338 | regexContext = new RegexContext(); 339 | // Line 127 & 132-136 340 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_VERSION); 341 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 342 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 343 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 344 | keyList = new ArrayList(); 345 | keyList.add(WordKey.Word); 346 | keyList.add(WordKey.N_Word); 347 | keyList.add(WordKey.N2_Word); 348 | regexContext.addWordListPattern(keyList, pattern17); 349 | regexContext.addLabelRegex(LabelKey.P2_Label, sw_version); 350 | regexList.add(regexContext); 351 | 352 | regexContext = new RegexContext(); 353 | // Line 127-131 354 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 355 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_VERSION); 356 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 357 | keyList = new ArrayList(); 358 | keyList.add(WordKey.Word); 359 | keyList.add(WordKey.N_Word); 360 | keyList.add(WordKey.N2_Word); 361 | regexContext.addWordListPattern(keyList, pattern17); 362 | regexContext.addLabelRegex(LabelKey.P_Label, sw_version); 363 | regexList.add(regexContext); 364 | 365 | regexContext = new RegexContext(); 366 | // Line 138-139 367 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.VULN_CVE); 368 | regexContext.addWordPattern(WordKey.Word, pattern19); 369 | regexList.add(regexContext); 370 | 371 | regexContext = new RegexContext(); 372 | // Line 143-144 373 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.VULN_MS); 374 | regexContext.addWordPattern(WordKey.Word, pattern20); 375 | regexList.add(regexContext); 376 | 377 | regexContext = new RegexContext(); 378 | // Line 169-179 & 183-193 & 248-258 & 269-279 379 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 380 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_PRODUCT); 381 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_PRODUCT); 382 | regexContext.addHeuristicLabel(LabelKey.N3_Label, CyberHeuristicAnnotator.SW_VERSION); 383 | keyList = new ArrayList(); 384 | keyList.add(WordKey.Word); 385 | keyList.add(WordKey.N_Word); 386 | keyList.add(WordKey.N2_Word); 387 | keyList.add(WordKey.N3_Word); 388 | regexContext.addWordListPattern(keyList, pattern8); 389 | regexList.add(regexContext); 390 | 391 | regexContext = new RegexContext(); 392 | // Line 197-205 & 209-217 & 222-230 & 235-243 393 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 394 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_PRODUCT); 395 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_VERSION); 396 | keyList = new ArrayList(); 397 | keyList.add(WordKey.Word); 398 | keyList.add(WordKey.N_Word); 399 | keyList.add(WordKey.N2_Word); 400 | regexContext.addWordListPattern(keyList, pattern10); 401 | regexList.add(regexContext); 402 | 403 | regexContext = new RegexContext(); 404 | // Line 263-264 405 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 406 | regexContext.addWordPattern(WordKey.Word, pattern12); 407 | regexList.add(regexContext); 408 | 409 | regexContext = new RegexContext(); 410 | // Line 284-295 411 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 412 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_PRODUCT); 413 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_PRODUCT); 414 | regexContext.addHeuristicLabel(LabelKey.N3_Label, CyberHeuristicAnnotator.SW_PRODUCT); 415 | regexContext.addHeuristicLabel(LabelKey.N4_Label, CyberHeuristicAnnotator.SW_VERSION); 416 | keyList = new ArrayList(); 417 | keyList.add(WordKey.Word); 418 | keyList.add(WordKey.N_Word); 419 | keyList.add(WordKey.N2_Word); 420 | keyList.add(WordKey.N3_Word); 421 | keyList.add(WordKey.N4_Word); 422 | regexContext.addWordListPattern(keyList, pattern8); 423 | regexList.add(regexContext); 424 | 425 | regexContext = new RegexContext(); 426 | // Line 300-311 427 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 428 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_PRODUCT); 429 | regexContext.addHeuristicLabel(LabelKey.N2_Label, CyberHeuristicAnnotator.SW_PRODUCT); 430 | regexContext.addHeuristicLabel(LabelKey.N3_Label, CyberHeuristicAnnotator.SW_PRODUCT); 431 | regexContext.addHeuristicLabel(LabelKey.N4_Label, CyberHeuristicAnnotator.SW_VERSION); 432 | keyList = new ArrayList(); 433 | keyList.add(WordKey.Word); 434 | keyList.add(WordKey.N_Word); 435 | keyList.add(WordKey.N2_Word); 436 | keyList.add(WordKey.N3_Word); 437 | keyList.add(WordKey.N4_Word); 438 | regexContext.addWordListPattern(keyList, pattern9); 439 | regexList.add(regexContext); 440 | 441 | regexContext = new RegexContext(); 442 | // Lines 27-28 443 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VERSION); 444 | regexContext.addWordPatternList(WordKey.Word, patternList0); 445 | regexContext.addLabelRegex(LabelKey.Label, no_label); 446 | regexList.add(regexContext); 447 | 448 | regexContext = new RegexContext(); 449 | // Line 316-317 450 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 451 | regexContext.addWordPattern(WordKey.Word, pattern15); 452 | regexList.add(regexContext); 453 | 454 | regexContext = new RegexContext(); 455 | // Line 333-339 456 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 457 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_PRODUCT); 458 | keyList = new ArrayList(); 459 | keyList.add(WordKey.Word); 460 | keyList.add(WordKey.N_Word); 461 | regexContext.addWordListPattern(keyList, pattern18); 462 | regexList.add(regexContext); 463 | 464 | regexContext = new RegexContext(); 465 | // Line 343-353 & 354-361 & 362-368 466 | regexContext.addHeuristicLabel(LabelKey.P2_Label, CyberHeuristicAnnotator.FUNCTION_NAME); 467 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.FUNCTION_NAME); 468 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.FUNCTION_NAME); 469 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.FUNCTION_NAME); 470 | keyList = new ArrayList(); 471 | keyList.add(WordKey.P2_Word); 472 | keyList.add(WordKey.P_Word); 473 | keyList.add(WordKey.Word); 474 | keyList.add(WordKey.N_Word); 475 | regexContext.addWordListPattern(keyList, pattern22); 476 | regexList.add(regexContext); 477 | 478 | regexContext = new RegexContext(); 479 | // Line 369-370 480 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.FUNCTION_NAME); 481 | regexContext.addWordPattern(WordKey.Word, pattern4); 482 | regexList.add(regexContext); 483 | 484 | regexContext = new RegexContext(); 485 | // Line 375-379 486 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.FILE_NAME); 487 | keyList = new ArrayList(); 488 | keyList.add(WordKey.P2_Word); 489 | keyList.add(WordKey.P_Word); 490 | keyList.add(WordKey.Word); 491 | regexContext.addWordListPattern(keyList, pattern23); 492 | regexList.add(regexContext); 493 | 494 | regexContext = new RegexContext(); 495 | // Line 375-383 496 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.FILE_NAME); 497 | keyList = new ArrayList(); 498 | keyList.add(WordKey.Word); 499 | keyList.add(WordKey.N_Word); 500 | regexContext.addWordListPattern(keyList, pattern24); 501 | regexList.add(regexContext); 502 | 503 | regexContext = new RegexContext(); 504 | // Line 385-389 505 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.FILE_NAME); 506 | keyList = new ArrayList(); 507 | keyList.add(WordKey.Word); 508 | patternList = new ArrayList(); 509 | patternList.add(pattern25); 510 | patternList.add(pattern26); 511 | patternList.add(pattern27); 512 | List notOpList = new ArrayList(); 513 | notOpList.add(Boolean.FALSE); 514 | notOpList.add(Boolean.TRUE); 515 | notOpList.add(Boolean.TRUE); 516 | regexContext.addPatternLists(keyList, patternList, notOpList); 517 | regexList.add(regexContext); 518 | 519 | regexContext = new RegexContext(); 520 | // Line 393-404 521 | regexContext.addHeuristicLabel(LabelKey.P2_Label, CyberHeuristicAnnotator.SW_PRODUCT); 522 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_PRODUCT); 523 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 524 | keyList = new ArrayList(); 525 | keyList.add(WordKey.P2_Word); 526 | keyList.add(WordKey.P_Word); 527 | keyList.add(WordKey.Word); 528 | regexContext.addWordListPattern(keyList, pattern28); 529 | regexContext.addLabelRegex(LabelKey.P2_Label, no_label); 530 | regexContext.addLabelRegex(LabelKey.P_Label, no_label); 531 | regexList.add(regexContext); 532 | 533 | regexContext = new RegexContext(); 534 | // Line 393-404 535 | regexContext.addHeuristicLabel(LabelKey.P_Label, CyberHeuristicAnnotator.SW_PRODUCT); 536 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 537 | keyList = new ArrayList(); 538 | keyList.add(WordKey.P_Word); 539 | keyList.add(WordKey.Word); 540 | regexContext.addWordListPattern(keyList, pattern28); 541 | regexContext.addLabelRegex(LabelKey.P_Label, no_label); 542 | regexList.add(regexContext); 543 | 544 | regexContext = new RegexContext(); 545 | // Line 431- 447 546 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_VENDOR); 547 | regexContext.addHeuristicLabel(LabelKey.N_Label, CyberHeuristicAnnotator.SW_PRODUCT); 548 | keyList = new ArrayList(); 549 | keyList.add(WordKey.Word); 550 | keyList.add(WordKey.N_Word); 551 | regexContext.addWordListPattern(keyList, pattern29); 552 | regexContext.addLabelRegex(LabelKey.N_Label, no_label); 553 | regexList.add(regexContext); 554 | 555 | regexContext = new RegexContext(); 556 | // Line 450-451 557 | regexContext.addHeuristicLabel(LabelKey.Label, CyberHeuristicAnnotator.SW_PRODUCT); 558 | regexContext.addWordPattern(WordKey.Word, pattern30); 559 | regexList.add(regexContext); 560 | 561 | } 562 | 563 | 564 | public static void main(String[] args) { 565 | String exampleText = "Microsoft Windows 7 before SP1 has Oracle Java Runtime Environment cross-site scripting vulnerability in file.php (refer to CVE-2014-1234)."; 566 | EntityLabeler labeler = new EntityLabeler(); 567 | Annotation doc = labeler.getAnnotatedDoc("My Doc", exampleText); 568 | 569 | List sentences = doc.get(SentencesAnnotation.class); 570 | for ( CoreMap sentence : sentences) { 571 | // 572 | for ( CoreLabel token : sentence.get(TokensAnnotation.class)) { 573 | String word = token.get(TextAnnotation.class); 574 | if (word.equalsIgnoreCase("Windows") || word.equalsIgnoreCase("7")) { 575 | token.set(CyberHeuristicAnnotation.class, CyberHeuristicAnnotator.SW_PRODUCT); 576 | } 577 | else if (word.equalsIgnoreCase("before") || word.equalsIgnoreCase("SP1")) { 578 | token.set(CyberHeuristicAnnotation.class, CyberHeuristicAnnotator.SW_VERSION); 579 | } 580 | else if (word.equalsIgnoreCase("has") || word.equalsIgnoreCase("in")) { 581 | token.set(CyberHeuristicAnnotation.class, CyberHeuristicAnnotator.O); 582 | } 583 | else if (word.equalsIgnoreCase("cross-site") || word.equalsIgnoreCase("scripting") || word.equalsIgnoreCase("vulnerability")) { 584 | token.set(CyberHeuristicAnnotation.class, CyberHeuristicAnnotator.VULN_DESC); 585 | } 586 | else if (word.equalsIgnoreCase("file.php")) { 587 | token.set(CyberHeuristicAnnotation.class, CyberHeuristicAnnotator.FILE_NAME); 588 | } 589 | else if (word.equalsIgnoreCase("CVE-2014-1234")) { 590 | token.set(CyberHeuristicAnnotation.class, CyberHeuristicAnnotator.VULN_CVE); 591 | } 592 | // System.out.println(token.get(TextAnnotation.class) + "\t" + token.get(PartOfSpeechAnnotation.class) + "\t" + token.get(CyberAnnotation.class)); 593 | } 594 | } 595 | 596 | } 597 | 598 | } 599 | -------------------------------------------------------------------------------- /src/main/resources/dictionaries/operating_systems.json: -------------------------------------------------------------------------------- 1 | { 2 | "result":[ 3 | { 4 | "/common/topic/alias":[], 5 | "id":"/en/aix_operating_system", 6 | "name":"IBM AIX", 7 | "type":"/computer/operating_system" 8 | }, 9 | { 10 | "/common/topic/alias":[], 11 | "id":"/en/amstrad_cpc", 12 | "name":"Amstrad CPC", 13 | "type":"/computer/operating_system" 14 | }, 15 | { 16 | "/common/topic/alias":[], 17 | "id":"/en/amigaos", 18 | "name":"AmigaOS", 19 | "type":"/computer/operating_system" 20 | }, 21 | { 22 | "/common/topic/alias":[], 23 | "id":"/en/bbc_micro", 24 | "name":"BBC Micro", 25 | "type":"/computer/operating_system" 26 | }, 27 | { 28 | "/common/topic/alias":[ 29 | "Berkeley Unix", 30 | "BSD" 31 | ], 32 | "id":"/en/berkeley_software_distribution", 33 | "name":"Berkeley Software Distribution", 34 | "type":"/computer/operating_system" 35 | }, 36 | { 37 | "/common/topic/alias":[], 38 | "id":"/en/beos", 39 | "name":"BeOS", 40 | "type":"/computer/operating_system" 41 | }, 42 | { 43 | "/common/topic/alias":[], 44 | "id":"/en/cygwin", 45 | "name":"Cygwin", 46 | "type":"/computer/operating_system" 47 | }, 48 | { 49 | "/common/topic/alias":[ 50 | "CBM64", 51 | "CBM 64", 52 | "C64" 53 | ], 54 | "id":"/en/commodore_64", 55 | "name":"Commodore 64", 56 | "type":"/computer/operating_system" 57 | }, 58 | { 59 | "/common/topic/alias":[ 60 | "Disk Operating System" 61 | ], 62 | "id":"/en/dos", 63 | "name":"DOS", 64 | "type":"/computer/operating_system" 65 | }, 66 | { 67 | "/common/topic/alias":[ 68 | "Debian" 69 | ], 70 | "id":"/en/debian_gnu_linux", 71 | "name":"Debian GNU/Linux", 72 | "type":"/computer/operating_system" 73 | }, 74 | { 75 | "/common/topic/alias":[], 76 | "id":"/en/freebsd", 77 | "name":"FreeBSD", 78 | "type":"/computer/operating_system" 79 | }, 80 | { 81 | "/common/topic/alias":[ 82 | "GNU's Not Unix" 83 | ], 84 | "id":"/en/gnu", 85 | "name":"GNU", 86 | "type":"/computer/operating_system" 87 | }, 88 | { 89 | "/common/topic/alias":[], 90 | "id":"/en/gnu_hurd", 91 | "name":"GNU Hurd", 92 | "type":"/computer/operating_system" 93 | }, 94 | { 95 | "/common/topic/alias":[], 96 | "id":"/en/irix", 97 | "name":"IRIX", 98 | "type":"/computer/operating_system" 99 | }, 100 | { 101 | "/common/topic/alias":[], 102 | "id":"/en/linspire", 103 | "name":"Linspire", 104 | "type":"/computer/operating_system" 105 | }, 106 | { 107 | "/common/topic/alias":[], 108 | "id":"/en/multics", 109 | "name":"Multics", 110 | "type":"/computer/operating_system" 111 | }, 112 | { 113 | "/common/topic/alias":[], 114 | "id":"/en/microsoft_windows", 115 | "name":"Microsoft Windows", 116 | "type":"/computer/operating_system" 117 | }, 118 | { 119 | "/common/topic/alias":[], 120 | "id":"/en/minix", 121 | "name":"MINIX", 122 | "type":"/computer/operating_system" 123 | }, 124 | { 125 | "/common/topic/alias":[ 126 | "Mandrake", 127 | "Mandriva" 128 | ], 129 | "id":"/en/mandriva_linux", 130 | "name":"Mandriva Linux", 131 | "type":"/computer/operating_system" 132 | }, 133 | { 134 | "/common/topic/alias":[ 135 | "MicroSoft Disk Operating System", 136 | "MS DOS", 137 | "Microsoft DOS", 138 | "DOS", 139 | "MSDOS" 140 | ], 141 | "id":"/en/ms-dos", 142 | "name":"MS-DOS", 143 | "type":"/computer/operating_system" 144 | }, 145 | { 146 | "/common/topic/alias":[ 147 | "Mac" 148 | ], 149 | "id":"/en/mac_os", 150 | "name":"Mac OS", 151 | "type":"/computer/operating_system" 152 | }, 153 | { 154 | "/common/topic/alias":[ 155 | "OSX", 156 | "Operating System X" 157 | ], 158 | "id":"/en/mac_os_x", 159 | "name":"OS X", 160 | "type":"/computer/operating_system" 161 | }, 162 | { 163 | "/common/topic/alias":[], 164 | "id":"/en/netbsd", 165 | "name":"NetBSD", 166 | "type":"/computer/operating_system" 167 | }, 168 | { 169 | "/common/topic/alias":[], 170 | "id":"/en/openbsd", 171 | "name":"OpenBSD", 172 | "type":"/computer/operating_system" 173 | }, 174 | { 175 | "/common/topic/alias":[], 176 | "id":"/en/os_2", 177 | "name":"OS/2", 178 | "type":"/computer/operating_system" 179 | }, 180 | { 181 | "/common/topic/alias":[], 182 | "id":"/en/os_360", 183 | "name":"OS/360", 184 | "type":"/computer/operating_system" 185 | }, 186 | { 187 | "/common/topic/alias":[ 188 | "IEEE Std. 1003.1" 189 | ], 190 | "id":"/en/posix", 191 | "name":"POSIX", 192 | "type":"/computer/operating_system" 193 | }, 194 | { 195 | "/common/topic/alias":[ 196 | "Sony Playstation", 197 | "Playstation 1" 198 | ], 199 | "id":"/en/playstation", 200 | "name":"PlayStation", 201 | "type":"/computer/operating_system" 202 | }, 203 | { 204 | "/common/topic/alias":[], 205 | "id":"/en/plan_9_from_bell_labs", 206 | "name":"Plan 9", 207 | "type":"/computer/operating_system" 208 | }, 209 | { 210 | "/common/topic/alias":[ 211 | "PS3" 212 | ], 213 | "id":"/en/playstation_3", 214 | "name":"PlayStation 3", 215 | "type":"/computer/operating_system" 216 | }, 217 | { 218 | "/common/topic/alias":[ 219 | "Red Hat", 220 | "RedHat Linux" 221 | ], 222 | "id":"/en/red_hat_linux", 223 | "name":"Red Hat Linux", 224 | "type":"/computer/operating_system" 225 | }, 226 | { 227 | "/common/topic/alias":[], 228 | "id":"/en/real-time_operating_system", 229 | "name":"Real-time operating system", 230 | "type":"/computer/operating_system" 231 | }, 232 | { 233 | "/common/topic/alias":[], 234 | "id":"/en/suse_linux", 235 | "name":"SUSE Linux", 236 | "type":"/computer/operating_system" 237 | }, 238 | { 239 | "/common/topic/alias":[], 240 | "id":"/en/slackware", 241 | "name":"Slackware", 242 | "type":"/computer/operating_system" 243 | }, 244 | { 245 | "/common/topic/alias":[], 246 | "id":"/en/sunos", 247 | "name":"SunOS", 248 | "type":"/computer/operating_system" 249 | }, 250 | { 251 | "/common/topic/alias":[], 252 | "id":"/en/transaction_processing_facility", 253 | "name":"Transaction Processing Facility", 254 | "type":"/computer/operating_system" 255 | }, 256 | { 257 | "/common/topic/alias":[ 258 | "UNIX\u00ae", 259 | "UNIX" 260 | ], 261 | "id":"/en/unix", 262 | "name":"Unix", 263 | "type":"/computer/operating_system" 264 | }, 265 | { 266 | "/common/topic/alias":[], 267 | "id":"/en/unix-like", 268 | "name":"Unix-like", 269 | "type":"/computer/operating_system" 270 | }, 271 | { 272 | "/common/topic/alias":[ 273 | "VAX-11/VMS", 274 | "VAX/VMS", 275 | "VMS" 276 | ], 277 | "id":"/en/openvms", 278 | "name":"OpenVMS", 279 | "type":"/computer/operating_system" 280 | }, 281 | { 282 | "/common/topic/alias":[], 283 | "id":"/en/windows_nt", 284 | "name":"Windows NT", 285 | "type":"/computer/operating_system" 286 | }, 287 | { 288 | "/common/topic/alias":[ 289 | "Whistler", 290 | "Windows eXPerience", 291 | "Microsoft Windows XP", 292 | "XP" 293 | ], 294 | "id":"/en/windows_xp", 295 | "name":"Windows XP", 296 | "type":"/computer/operating_system" 297 | }, 298 | { 299 | "/common/topic/alias":[ 300 | "Windows NT 5" 301 | ], 302 | "id":"/en/windows_2000", 303 | "name":"Windows 2000", 304 | "type":"/computer/operating_system" 305 | }, 306 | { 307 | "/common/topic/alias":[], 308 | "id":"/en/windows_95", 309 | "name":"Windows 95", 310 | "type":"/computer/operating_system" 311 | }, 312 | { 313 | "/common/topic/alias":[], 314 | "id":"/en/hp-ux", 315 | "name":"HP-UX", 316 | "type":"/computer/operating_system" 317 | }, 318 | { 319 | "/common/topic/alias":[], 320 | "id":"/en/palm_os", 321 | "name":"Palm OS", 322 | "type":"/computer/operating_system" 323 | }, 324 | { 325 | "/common/topic/alias":[ 326 | "OSF/1", 327 | "Digital Unix" 328 | ], 329 | "id":"/en/tru64_unix", 330 | "name":"Tru64 UNIX", 331 | "type":"/computer/operating_system" 332 | }, 333 | { 334 | "/common/topic/alias":[], 335 | "id":"/en/os-9", 336 | "name":"OS-9", 337 | "type":"/computer/operating_system" 338 | }, 339 | { 340 | "/common/topic/alias":[], 341 | "id":"/en/z_os", 342 | "name":"z/OS", 343 | "type":"/computer/operating_system" 344 | }, 345 | { 346 | "/common/topic/alias":[], 347 | "id":"/en/nextstep", 348 | "name":"NeXTSTEP", 349 | "type":"/computer/operating_system" 350 | }, 351 | { 352 | "/common/topic/alias":[ 353 | "Java ME" 354 | ], 355 | "id":"/en/java_platform_micro_edition", 356 | "name":"Java Platform, Micro Edition", 357 | "type":"/computer/operating_system" 358 | }, 359 | { 360 | "/common/topic/alias":[ 361 | "CP/M operating system" 362 | ], 363 | "id":"/en/cp_m", 364 | "name":"CP/M", 365 | "type":"/computer/operating_system" 366 | }, 367 | { 368 | "/common/topic/alias":[ 369 | "Solaris", 370 | "Solaris Operating Environment" 371 | ], 372 | "id":"/en/solaris_operating_system", 373 | "name":"Solaris Operating System", 374 | "type":"/computer/operating_system" 375 | }, 376 | { 377 | "/common/topic/alias":[], 378 | "id":"/en/mac_os_x_server", 379 | "name":"OS X Server", 380 | "type":"/computer/operating_system" 381 | }, 382 | { 383 | "/common/topic/alias":[], 384 | "id":"/en/unicos", 385 | "name":"UNICOS", 386 | "type":"/computer/operating_system" 387 | }, 388 | { 389 | "/common/topic/alias":[], 390 | "id":"/en/dnix", 391 | "name":"DNIX", 392 | "type":"/computer/operating_system" 393 | }, 394 | { 395 | "/common/topic/alias":[], 396 | "id":"/wikipedia/ru_id/254445", 397 | "name":"Darwin", 398 | "type":"/computer/operating_system" 399 | }, 400 | { 401 | "/common/topic/alias":[], 402 | "id":"/en/tinfoil_hat_linux", 403 | "name":"Tinfoil Hat Linux", 404 | "type":"/computer/operating_system" 405 | }, 406 | { 407 | "/common/topic/alias":[], 408 | "id":"/en/rsx-11", 409 | "name":"RSX-11", 410 | "type":"/computer/operating_system" 411 | }, 412 | { 413 | "/common/topic/alias":[], 414 | "id":"/en/gnu_mach", 415 | "name":"GNU Mach", 416 | "type":"/computer/operating_system" 417 | }, 418 | { 419 | "/common/topic/alias":[], 420 | "id":"/en/qnx", 421 | "name":"QNX", 422 | "type":"/computer/operating_system" 423 | }, 424 | { 425 | "/common/topic/alias":[], 426 | "id":"/en/tops-20", 427 | "name":"TOPS-20", 428 | "type":"/computer/operating_system" 429 | }, 430 | { 431 | "/common/topic/alias":[], 432 | "id":"/en/windows_1_0", 433 | "name":"Windows 1.0", 434 | "type":"/computer/operating_system" 435 | }, 436 | { 437 | "/common/topic/alias":[], 438 | "id":"/en/rt-11", 439 | "name":"RT-11", 440 | "type":"/computer/operating_system" 441 | }, 442 | { 443 | "/common/topic/alias":[], 444 | "id":"/en/windows_98", 445 | "name":"Windows 98", 446 | "type":"/computer/operating_system" 447 | }, 448 | { 449 | "/common/topic/alias":[ 450 | "Windows Millennium Edition" 451 | ], 452 | "id":"/en/windows_me", 453 | "name":"Windows ME", 454 | "type":"/computer/operating_system" 455 | }, 456 | { 457 | "/common/topic/alias":[], 458 | "id":"/en/xenix", 459 | "name":"Xenix", 460 | "type":"/computer/operating_system" 461 | }, 462 | { 463 | "/common/topic/alias":[], 464 | "id":"/en/psos", 465 | "name":"pSOS", 466 | "type":"/computer/operating_system" 467 | }, 468 | { 469 | "/common/topic/alias":[], 470 | "id":"/en/newos", 471 | "name":"NewOS", 472 | "type":"/computer/operating_system" 473 | }, 474 | { 475 | "/common/topic/alias":[], 476 | "id":"/wikipedia/ru_id/195675", 477 | "name":"Syllable Desktop", 478 | "type":"/computer/operating_system" 479 | }, 480 | { 481 | "/common/topic/alias":[ 482 | "Gentoo" 483 | ], 484 | "id":"/en/gentoo_linux", 485 | "name":"Gentoo Linux", 486 | "type":"/computer/operating_system" 487 | }, 488 | { 489 | "/common/topic/alias":[], 490 | "id":"/en/l4_microkernel_family", 491 | "name":"L4 microkernel family", 492 | "type":"/computer/operating_system" 493 | }, 494 | { 495 | "/common/topic/alias":[], 496 | "id":"/en/freedos", 497 | "name":"FreeDOS", 498 | "type":"/computer/operating_system" 499 | }, 500 | { 501 | "/common/topic/alias":[], 502 | "id":"/en/pc-dos", 503 | "name":"IBM PC DOS", 504 | "type":"/computer/operating_system" 505 | }, 506 | { 507 | "/common/topic/alias":[], 508 | "id":"/en/vxworks", 509 | "name":"VxWorks", 510 | "type":"/computer/operating_system" 511 | }, 512 | { 513 | "/common/topic/alias":[], 514 | "id":"/en/knoppix", 515 | "name":"Knoppix", 516 | "type":"/computer/operating_system" 517 | }, 518 | { 519 | "/common/topic/alias":[], 520 | "id":"/en/menuetos", 521 | "name":"MenuetOS", 522 | "type":"/computer/operating_system" 523 | }, 524 | { 525 | "/common/topic/alias":[], 526 | "id":"/en/windows_3_1x", 527 | "name":"Windows 3.1x", 528 | "type":"/computer/operating_system" 529 | }, 530 | { 531 | "/common/topic/alias":[], 532 | "id":"/en/risc_os", 533 | "name":"RISC OS", 534 | "type":"/computer/operating_system" 535 | }, 536 | { 537 | "/common/topic/alias":[], 538 | "id":"/en/windows_3_0", 539 | "name":"Windows 3.0", 540 | "type":"/computer/operating_system" 541 | }, 542 | { 543 | "/common/topic/alias":[], 544 | "id":"/en/atheos", 545 | "name":"AtheOS", 546 | "type":"/computer/operating_system" 547 | }, 548 | { 549 | "/common/topic/alias":[], 550 | "id":"/en/cp_m_86", 551 | "name":"CP/M-86", 552 | "type":"/computer/operating_system" 553 | }, 554 | { 555 | "/common/topic/alias":[], 556 | "id":"/en/va_kernel", 557 | "name":"VA Kernel", 558 | "type":"/computer/operating_system" 559 | }, 560 | { 561 | "/common/topic/alias":[], 562 | "id":"/en/cisco_ios", 563 | "name":"Cisco IOS", 564 | "type":"/computer/operating_system" 565 | }, 566 | { 567 | "/common/topic/alias":[], 568 | "id":"/en/windows_2_0", 569 | "name":"Windows 2.0", 570 | "type":"/computer/operating_system" 571 | }, 572 | { 573 | "/common/topic/alias":[], 574 | "id":"/en/gnulinex", 575 | "name":"gnuLinEx", 576 | "type":"/computer/operating_system" 577 | }, 578 | { 579 | "/common/topic/alias":[ 580 | "QDOS" 581 | ], 582 | "id":"/en/qdos", 583 | "name":"86-DOS", 584 | "type":"/computer/operating_system" 585 | }, 586 | { 587 | "/common/topic/alias":[], 588 | "id":"/en/ultrix", 589 | "name":"Ultrix", 590 | "type":"/computer/operating_system" 591 | }, 592 | { 593 | "/common/topic/alias":[], 594 | "id":"/en/mac_os_9", 595 | "name":"Mac OS 9", 596 | "type":"/computer/operating_system" 597 | }, 598 | { 599 | "/common/topic/alias":[ 600 | "Windows .NET Server", 601 | "Windows 2002 Server", 602 | "Whistler Server", 603 | "Windows 2003 Server" 604 | ], 605 | "id":"/en/windows_server_2003", 606 | "name":"Windows Server 2003", 607 | "type":"/computer/operating_system" 608 | }, 609 | { 610 | "/common/topic/alias":[], 611 | "id":"/en/gp32", 612 | "name":"GP32", 613 | "type":"/computer/operating_system" 614 | }, 615 | { 616 | "/common/topic/alias":[], 617 | "id":"/en/amiga_unix", 618 | "name":"Amiga Unix", 619 | "type":"/computer/operating_system" 620 | }, 621 | { 622 | "/common/topic/alias":[], 623 | "id":"/en/windows_ce", 624 | "name":"Windows CE", 625 | "type":"/computer/operating_system" 626 | }, 627 | { 628 | "/common/topic/alias":[], 629 | "id":"/en/a_ux", 630 | "name":"A/UX", 631 | "type":"/computer/operating_system" 632 | }, 633 | { 634 | "/common/topic/alias":[], 635 | "id":"/en/yellow_dog_linux", 636 | "name":"Yellow Dog Linux", 637 | "type":"/computer/operating_system" 638 | }, 639 | { 640 | "/common/topic/alias":[ 641 | "i5/OS" 642 | ], 643 | "id":"/en/os_400", 644 | "name":"IBM i", 645 | "type":"/computer/operating_system" 646 | }, 647 | { 648 | "/common/topic/alias":[], 649 | "id":"/en/apple_dos", 650 | "name":"Apple DOS", 651 | "type":"/computer/operating_system" 652 | }, 653 | { 654 | "/common/topic/alias":[], 655 | "id":"/en/os_8", 656 | "name":"OS/8", 657 | "type":"/computer/operating_system" 658 | }, 659 | { 660 | "/common/topic/alias":[], 661 | "id":"/en/ctss", 662 | "name":"Compatible Time-Sharing System", 663 | "type":"/computer/operating_system" 664 | }, 665 | { 666 | "/common/topic/alias":[], 667 | "id":"/en/coherent", 668 | "name":"Coherent", 669 | "type":"/computer/operating_system" 670 | }, 671 | { 672 | "/common/topic/alias":[], 673 | "id":"/wikipedia/de_id/139507", 674 | "name":"Apple SOS", 675 | "type":"/computer/operating_system" 676 | }, 677 | { 678 | "/common/topic/alias":[], 679 | "id":"/en/morphos", 680 | "name":"MorphOS", 681 | "type":"/computer/operating_system" 682 | }, 683 | { 684 | "/common/topic/alias":[], 685 | "id":"/en/s60_platform", 686 | "name":"S60", 687 | "type":"/computer/operating_system" 688 | }, 689 | { 690 | "/common/topic/alias":[], 691 | "id":"/en/trustix", 692 | "name":"Trustix", 693 | "type":"/computer/operating_system" 694 | }, 695 | { 696 | "/common/topic/alias":[], 697 | "id":"/en/mac_os_x_v10_3", 698 | "name":"Mac OS X Panther", 699 | "type":"/computer/operating_system" 700 | }, 701 | { 702 | "/common/topic/alias":[ 703 | "DragonFly" 704 | ], 705 | "id":"/en/dragonfly_bsd", 706 | "name":"DragonFly BSD", 707 | "type":"/computer/operating_system" 708 | }, 709 | { 710 | "/common/topic/alias":[], 711 | "id":"/en/integer_basic", 712 | "name":"Integer BASIC", 713 | "type":"/computer/operating_system" 714 | }, 715 | { 716 | "/common/topic/alias":[], 717 | "id":"/en/rsts_e", 718 | "name":"RSTS/E", 719 | "type":"/computer/operating_system" 720 | }, 721 | { 722 | "/common/topic/alias":[ 723 | "VM/CMS" 724 | ], 725 | "id":"/en/vm", 726 | "name":"VM", 727 | "type":"/computer/operating_system" 728 | }, 729 | { 730 | "/common/topic/alias":[], 731 | "id":"/en/commodore_basic", 732 | "name":"Commodore BASIC", 733 | "type":"/computer/operating_system" 734 | }, 735 | { 736 | "/common/topic/alias":[], 737 | "id":"/en/msx_basic", 738 | "name":"MSX BASIC", 739 | "type":"/computer/operating_system" 740 | }, 741 | { 742 | "/common/topic/alias":[ 743 | "System 7", 744 | "Big Bang" 745 | ], 746 | "id":"/en/mac_os_7", 747 | "name":"Mac OS 7", 748 | "type":"/computer/operating_system" 749 | }, 750 | { 751 | "/common/topic/alias":[], 752 | "id":"/en/oberon_operating_system", 753 | "name":"Oberon", 754 | "type":"/computer/operating_system" 755 | }, 756 | { 757 | "/common/topic/alias":[], 758 | "id":"/en/extremely_reliable_operating_system", 759 | "name":"EROS", 760 | "type":"/computer/operating_system" 761 | }, 762 | { 763 | "/common/topic/alias":[], 764 | "id":"/en/reactos", 765 | "name":"ReactOS", 766 | "type":"/computer/operating_system" 767 | }, 768 | { 769 | "/common/topic/alias":[], 770 | "id":"/en/novell_netware", 771 | "name":"NetWare", 772 | "type":"/computer/operating_system" 773 | }, 774 | { 775 | "/common/topic/alias":[], 776 | "id":"/en/mint", 777 | "name":"MiNT", 778 | "type":"/computer/operating_system" 779 | }, 780 | { 781 | "/common/topic/alias":[], 782 | "id":"/en/emutos", 783 | "name":"EmuTOS", 784 | "type":"/computer/operating_system" 785 | }, 786 | { 787 | "/common/topic/alias":[], 788 | "id":"/en/banyan_vines", 789 | "name":"Banyan VINES", 790 | "type":"/computer/operating_system" 791 | }, 792 | { 793 | "/common/topic/alias":[], 794 | "id":"/en/damn_small_linux", 795 | "name":"Damn Small Linux", 796 | "type":"/computer/operating_system" 797 | }, 798 | { 799 | "/common/topic/alias":[], 800 | "id":"/en/sinclair_basic", 801 | "name":"Sinclair BASIC", 802 | "type":"/computer/operating_system" 803 | }, 804 | { 805 | "/common/topic/alias":[], 806 | "id":"/en/mac_os_x_v10_2", 807 | "name":"Mac OS X v10.2", 808 | "type":"/computer/operating_system" 809 | }, 810 | { 811 | "/common/topic/alias":[], 812 | "id":"/en/slax", 813 | "name":"Slax", 814 | "type":"/computer/operating_system" 815 | }, 816 | { 817 | "/common/topic/alias":[], 818 | "id":"/en/systemrescuecd", 819 | "name":"SystemRescueCD", 820 | "type":"/computer/operating_system" 821 | }, 822 | { 823 | "/common/topic/alias":[], 824 | "id":"/en/mepis", 825 | "name":"MEPIS", 826 | "type":"/computer/operating_system" 827 | }, 828 | { 829 | "/common/topic/alias":[], 830 | "id":"/en/ecos", 831 | "name":"eCos", 832 | "type":"/computer/operating_system" 833 | }, 834 | { 835 | "/common/topic/alias":[], 836 | "id":"/en/ms_8", 837 | "name":"MS/8", 838 | "type":"/computer/operating_system" 839 | }, 840 | { 841 | "/common/topic/alias":[ 842 | "System 6" 843 | ], 844 | "id":"/en/system_software_6", 845 | "name":"System Software 6", 846 | "type":"/computer/operating_system" 847 | }, 848 | { 849 | "/common/topic/alias":[], 850 | "id":"/en/sprite_operating_system", 851 | "name":"Sprite", 852 | "type":"/computer/operating_system" 853 | }, 854 | { 855 | "/common/topic/alias":[], 856 | "id":"/en/userlinux", 857 | "name":"UserLinux", 858 | "type":"/computer/operating_system" 859 | }, 860 | { 861 | "/common/topic/alias":[], 862 | "id":"/en/red_flag_linux", 863 | "name":"Red Flag Linux", 864 | "type":"/computer/operating_system" 865 | }, 866 | { 867 | "/common/topic/alias":[], 868 | "id":"/en/yoper", 869 | "name":"YOPER", 870 | "type":"/computer/operating_system" 871 | }, 872 | { 873 | "/common/topic/alias":[], 874 | "id":"/en/psion_5", 875 | "name":"Psion Series 5", 876 | "type":"/computer/operating_system" 877 | }, 878 | { 879 | "/common/topic/alias":[], 880 | "id":"/wikipedia/ja_id/1518519", 881 | "name":"V", 882 | "type":"/computer/operating_system" 883 | }, 884 | { 885 | "/common/topic/alias":[], 886 | "id":"/en/mac_os_x_v10_1", 887 | "name":"Mac OS X v10.1", 888 | "type":"/computer/operating_system" 889 | }, 890 | { 891 | "/common/topic/alias":[], 892 | "id":"/en/mac_os_x_v10_0", 893 | "name":"Mac OS X v10.0", 894 | "type":"/computer/operating_system" 895 | }, 896 | { 897 | "/common/topic/alias":[], 898 | "id":"/wikipedia/ja/Inferno_$0028$30AA$30DA$30EC$30FC$30C6$30A3$30F3$30B0$30B7$30B9$30C6$30E0$0029", 899 | "name":"Inferno", 900 | "type":"/computer/operating_system" 901 | }, 902 | { 903 | "/common/topic/alias":[], 904 | "id":"/en/mac_os_8", 905 | "name":"Mac OS 8", 906 | "type":"/computer/operating_system" 907 | }, 908 | { 909 | "/common/topic/alias":[], 910 | "id":"/en/tron_project", 911 | "name":"TRON project", 912 | "type":"/computer/operating_system" 913 | }, 914 | { 915 | "/common/topic/alias":[], 916 | "id":"/en/trs-dos", 917 | "name":"TRS-DOS", 918 | "type":"/computer/operating_system" 919 | }, 920 | { 921 | "/common/topic/alias":[], 922 | "id":"/wikipedia/en_title/Quark_$0028kernel$0029", 923 | "name":"Quark", 924 | "type":"/computer/operating_system" 925 | }, 926 | { 927 | "/common/topic/alias":[], 928 | "id":"/en/qtopia", 929 | "name":"Qt Extended", 930 | "type":"/computer/operating_system" 931 | }, 932 | { 933 | "/common/topic/alias":[], 934 | "id":"/en/tops-10", 935 | "name":"TOPS-10", 936 | "type":"/computer/operating_system" 937 | }, 938 | { 939 | "/common/topic/alias":[], 940 | "id":"/en/hydrixos", 941 | "name":"HydrixOS", 942 | "type":"/computer/operating_system" 943 | }, 944 | { 945 | "/common/topic/alias":[ 946 | "OpenBeOS" 947 | ], 948 | "id":"/wikipedia/it_id/108731", 949 | "name":"Haiku", 950 | "type":"/computer/operating_system" 951 | }, 952 | { 953 | "/common/topic/alias":[ 954 | "RHEL" 955 | ], 956 | "id":"/en/red_hat_enterprise_linux", 957 | "name":"Red Hat Enterprise Linux", 958 | "type":"/computer/operating_system" 959 | }, 960 | { 961 | "/common/topic/alias":[], 962 | "id":"/en/ark_linux", 963 | "name":"Ark Linux", 964 | "type":"/computer/operating_system" 965 | }, 966 | { 967 | "/common/topic/alias":[], 968 | "id":"/en/unixware", 969 | "name":"UnixWare", 970 | "type":"/computer/operating_system" 971 | }, 972 | { 973 | "/common/topic/alias":[], 974 | "id":"/en/berry_linux", 975 | "name":"Berry Linux", 976 | "type":"/computer/operating_system" 977 | }, 978 | { 979 | "/common/topic/alias":[], 980 | "id":"/en/sinclair_qdos", 981 | "name":"Sinclair QDOS", 982 | "type":"/computer/operating_system" 983 | }, 984 | { 985 | "/common/topic/alias":[], 986 | "id":"/en/unix_system_v", 987 | "name":"UNIX System V", 988 | "type":"/computer/operating_system" 989 | }, 990 | { 991 | "/common/topic/alias":[], 992 | "id":"/en/pts-dos", 993 | "name":"PTS-DOS", 994 | "type":"/computer/operating_system" 995 | }, 996 | { 997 | "/common/topic/alias":[], 998 | "id":"/en/windows_xp_professional_x64_edition", 999 | "name":"Windows XP Professional x64 Edition", 1000 | "type":"/computer/operating_system" 1001 | }, 1002 | { 1003 | "/common/topic/alias":[], 1004 | "id":"/en/dos_360", 1005 | "name":"DOS/360 and successors", 1006 | "type":"/computer/operating_system" 1007 | }, 1008 | { 1009 | "/common/topic/alias":[ 1010 | "OSX" 1011 | ], 1012 | "id":"/en/mac_os_x_v10_4", 1013 | "name":"Mac OS X Tiger", 1014 | "type":"/computer/operating_system" 1015 | }, 1016 | { 1017 | "/common/topic/alias":[], 1018 | "id":"/en/white_box_enterprise_linux", 1019 | "name":"White Box Enterprise Linux", 1020 | "type":"/computer/operating_system" 1021 | }, 1022 | { 1023 | "/common/topic/alias":[], 1024 | "id":"/en/arch_linux", 1025 | "name":"Arch Linux", 1026 | "type":"/computer/operating_system" 1027 | }, 1028 | { 1029 | "/common/topic/alias":[], 1030 | "id":"/en/pclinuxos", 1031 | "name":"PCLinuxOS", 1032 | "type":"/computer/operating_system" 1033 | }, 1034 | { 1035 | "/common/topic/alias":[], 1036 | "id":"/en/gnu_netbsd", 1037 | "name":"GNU/NetBSD", 1038 | "type":"/computer/operating_system" 1039 | }, 1040 | { 1041 | "/common/topic/alias":[], 1042 | "id":"/en/windows_xp_media_center_edition", 1043 | "name":"Windows XP Media Center Edition", 1044 | "type":"/computer/operating_system" 1045 | }, 1046 | { 1047 | "/common/topic/alias":[], 1048 | "id":"/en/windows_nt_4_0", 1049 | "name":"Windows NT 4.0", 1050 | "type":"/computer/operating_system" 1051 | }, 1052 | { 1053 | "/common/topic/alias":[], 1054 | "id":"/wikipedia/fr/Crux_Linux", 1055 | "name":"CRUX", 1056 | "type":"/computer/operating_system" 1057 | }, 1058 | { 1059 | "/common/topic/alias":[], 1060 | "id":"/en/co-createlinux", 1061 | "name":"Co-CreateLinux", 1062 | "type":"/computer/operating_system" 1063 | }, 1064 | { 1065 | "/common/topic/alias":[], 1066 | "id":"/en/freedows_os", 1067 | "name":"Freedows OS", 1068 | "type":"/computer/operating_system" 1069 | }, 1070 | { 1071 | "/common/topic/alias":[], 1072 | "id":"/en/contiki", 1073 | "name":"Contiki", 1074 | "type":"/computer/operating_system" 1075 | }, 1076 | { 1077 | "/common/topic/alias":[], 1078 | "id":"/en/cray_operating_system", 1079 | "name":"Cray Operating System", 1080 | "type":"/computer/operating_system" 1081 | }, 1082 | { 1083 | "/common/topic/alias":[], 1084 | "id":"/en/kurumin_linux", 1085 | "name":"Kurumin", 1086 | "type":"/computer/operating_system" 1087 | }, 1088 | { 1089 | "/common/topic/alias":[], 1090 | "id":"/en/smsq_e", 1091 | "name":"SMSQ/E", 1092 | "type":"/computer/operating_system" 1093 | }, 1094 | { 1095 | "/common/topic/alias":[], 1096 | "id":"/en/atari_tos", 1097 | "name":"Atari TOS", 1098 | "type":"/computer/operating_system" 1099 | }, 1100 | { 1101 | "/common/topic/alias":[], 1102 | "id":"/en/softlanding_linux_system", 1103 | "name":"Softlanding Linux System", 1104 | "type":"/computer/operating_system" 1105 | }, 1106 | { 1107 | "/common/topic/alias":[], 1108 | "id":"/en/nokia_9210", 1109 | "name":"Nokia 9210 Communicator", 1110 | "type":"/computer/operating_system" 1111 | }, 1112 | { 1113 | "/common/topic/alias":[], 1114 | "id":"/en/alt_linux", 1115 | "name":"ALT Linux", 1116 | "type":"/computer/operating_system" 1117 | }, 1118 | { 1119 | "/common/topic/alias":[], 1120 | "id":"/wikipedia/de_id/1252324", 1121 | "name":"Idris", 1122 | "type":"/computer/operating_system" 1123 | }, 1124 | { 1125 | "/common/topic/alias":[], 1126 | "id":"/en/windows_nt_3_1", 1127 | "name":"Windows NT 3.1", 1128 | "type":"/computer/operating_system" 1129 | }, 1130 | { 1131 | "/common/topic/alias":[ 1132 | "Ubuntu Linux" 1133 | ], 1134 | "id":"/en/ubuntu", 1135 | "name":"Ubuntu", 1136 | "type":"/computer/operating_system" 1137 | }, 1138 | { 1139 | "/common/topic/alias":[], 1140 | "id":"/en/centos", 1141 | "name":"CentOS", 1142 | "type":"/computer/operating_system" 1143 | }, 1144 | { 1145 | "/common/topic/alias":[], 1146 | "id":"/en/hikarunix", 1147 | "name":"Hikarunix", 1148 | "type":"/computer/operating_system" 1149 | }, 1150 | { 1151 | "/common/topic/alias":[], 1152 | "id":"/en/puppy_linux", 1153 | "name":"Puppy Linux", 1154 | "type":"/computer/operating_system" 1155 | }, 1156 | { 1157 | "/common/topic/alias":[], 1158 | "id":"/en/newton_os", 1159 | "name":"Newton OS", 1160 | "type":"/computer/operating_system" 1161 | }, 1162 | { 1163 | "/common/topic/alias":[], 1164 | "id":"/en/veritos", 1165 | "name":"VeritOS", 1166 | "type":"/computer/operating_system" 1167 | }, 1168 | { 1169 | "/common/topic/alias":[], 1170 | "id":"/en/commodore_dos", 1171 | "name":"Commodore DOS", 1172 | "type":"/computer/operating_system" 1173 | }, 1174 | { 1175 | "/common/topic/alias":[ 1176 | "BSDi", 1177 | "BSD/386" 1178 | ], 1179 | "id":"/en/bsd_os", 1180 | "name":"BSD/OS", 1181 | "type":"/computer/operating_system" 1182 | }, 1183 | { 1184 | "/common/topic/alias":[], 1185 | "id":"/wikipedia/ja_id/222678", 1186 | "name":"MonaOS", 1187 | "type":"/computer/operating_system" 1188 | }, 1189 | { 1190 | "/common/topic/alias":[], 1191 | "id":"/wikipedia/en_title/FLEX_$0028operating_system$0029", 1192 | "name":"FLEX", 1193 | "type":"/computer/operating_system" 1194 | }, 1195 | { 1196 | "/common/topic/alias":[], 1197 | "id":"/en/corel_linux", 1198 | "name":"Corel Linux", 1199 | "type":"/computer/operating_system" 1200 | }, 1201 | { 1202 | "/common/topic/alias":[], 1203 | "id":"/en/k42", 1204 | "name":"K42", 1205 | "type":"/computer/operating_system" 1206 | }, 1207 | { 1208 | "/common/topic/alias":[], 1209 | "id":"/en/e_os", 1210 | "name":"E/OS", 1211 | "type":"/computer/operating_system" 1212 | }, 1213 | { 1214 | "/common/topic/alias":[], 1215 | "id":"/en/windows_nt_4_0_embedded", 1216 | "name":"Windows NT 4.0 Embedded", 1217 | "type":"/computer/operating_system" 1218 | }, 1219 | { 1220 | "/common/topic/alias":[], 1221 | "id":"/en/opensolaris", 1222 | "name":"OpenSolaris", 1223 | "type":"/computer/operating_system" 1224 | }, 1225 | { 1226 | "/common/topic/alias":[], 1227 | "id":"/en/lunix", 1228 | "name":"LUnix", 1229 | "type":"/computer/operating_system" 1230 | }, 1231 | { 1232 | "/common/topic/alias":[], 1233 | "id":"/en/stratus_vos", 1234 | "name":"Stratus VOS", 1235 | "type":"/computer/operating_system" 1236 | }, 1237 | { 1238 | "/common/topic/alias":[], 1239 | "id":"/en/wps-8", 1240 | "name":"WPS-8", 1241 | "type":"/computer/operating_system" 1242 | }, 1243 | { 1244 | "/common/topic/alias":[], 1245 | "id":"/en/freevms", 1246 | "name":"FreeVMS", 1247 | "type":"/computer/operating_system" 1248 | }, 1249 | { 1250 | "/common/topic/alias":[], 1251 | "id":"/en/apple_pascal", 1252 | "name":"Apple Pascal", 1253 | "type":"/computer/operating_system" 1254 | }, 1255 | { 1256 | "/common/topic/alias":[], 1257 | "id":"/en/suse_linux_enterprise_desktop", 1258 | "name":"SUSE Linux Enterprise Desktop", 1259 | "type":"/computer/operating_system" 1260 | }, 1261 | { 1262 | "/common/topic/alias":[ 1263 | "Windows Mobile PPC" 1264 | ], 1265 | "id":"/en/windows_mobile", 1266 | "name":"Windows Mobile", 1267 | "type":"/computer/operating_system" 1268 | }, 1269 | { 1270 | "/common/topic/alias":[ 1271 | "EXEC VIII" 1272 | ], 1273 | "id":"/en/exec_8", 1274 | "name":"UNIVAC EXEC 8", 1275 | "type":"/computer/operating_system" 1276 | }, 1277 | { 1278 | "/common/topic/alias":[], 1279 | "id":"/wikipedia/ja_id/430726", 1280 | "name":"MIPS RISC/os", 1281 | "type":"/computer/operating_system" 1282 | }, 1283 | { 1284 | "/common/topic/alias":[], 1285 | "id":"/wikipedia/fr_id/2981615", 1286 | "name":"Integrity", 1287 | "type":"/computer/operating_system" 1288 | }, 1289 | { 1290 | "/common/topic/alias":[], 1291 | "id":"/en/atari_dos", 1292 | "name":"Atari DOS", 1293 | "type":"/computer/operating_system" 1294 | }, 1295 | { 1296 | "/common/topic/alias":[], 1297 | "id":"/en/eumel", 1298 | "name":"Eumel", 1299 | "type":"/computer/operating_system" 1300 | }, 1301 | { 1302 | "/common/topic/alias":[], 1303 | "id":"/en/firefly_bsd", 1304 | "name":"Firefly BSD", 1305 | "type":"/computer/operating_system" 1306 | }, 1307 | { 1308 | "/common/topic/alias":[], 1309 | "id":"/en/domain_os", 1310 | "name":"Domain/OS", 1311 | "type":"/computer/operating_system" 1312 | }, 1313 | { 1314 | "/common/topic/alias":[], 1315 | "id":"/en/interix", 1316 | "name":"Interix", 1317 | "type":"/computer/operating_system" 1318 | }, 1319 | { 1320 | "/common/topic/alias":[], 1321 | "id":"/en/scientific_linux", 1322 | "name":"Scientific Linux", 1323 | "type":"/computer/operating_system" 1324 | }, 1325 | { 1326 | "/common/topic/alias":[], 1327 | "id":"/en/native_oberon", 1328 | "name":"Native Oberon", 1329 | "type":"/computer/operating_system" 1330 | }, 1331 | { 1332 | "/common/topic/alias":[], 1333 | "id":"/en/bluebottle_os", 1334 | "name":"Bluebottle OS", 1335 | "type":"/computer/operating_system" 1336 | }, 1337 | { 1338 | "/common/topic/alias":[], 1339 | "id":"/en/sco_openserver", 1340 | "name":"SCO OpenServer", 1341 | "type":"/computer/operating_system" 1342 | }, 1343 | { 1344 | "/common/topic/alias":[], 1345 | "id":"/en/kubuntu", 1346 | "name":"Kubuntu", 1347 | "type":"/computer/operating_system" 1348 | }, 1349 | { 1350 | "/common/topic/alias":[], 1351 | "id":"/en/vector_linux", 1352 | "name":"VectorLinux", 1353 | "type":"/computer/operating_system" 1354 | }, 1355 | { 1356 | "/common/topic/alias":[], 1357 | "id":"/en/psion_3", 1358 | "name":"Psion Series 3", 1359 | "type":"/computer/operating_system" 1360 | }, 1361 | { 1362 | "/common/topic/alias":[], 1363 | "id":"/en/l3_microkernel", 1364 | "name":"L3 microkernel", 1365 | "type":"/computer/operating_system" 1366 | }, 1367 | { 1368 | "/common/topic/alias":[], 1369 | "id":"/en/ps2_linux", 1370 | "name":"Linux for PlayStation 2", 1371 | "type":"/computer/operating_system" 1372 | }, 1373 | { 1374 | "/common/topic/alias":[], 1375 | "id":"/wikipedia/lv/GEOS_$00288_bitu_oper$0113t$0101jsist$0113ma$0029", 1376 | "name":"GEOS", 1377 | "type":"/computer/operating_system" 1378 | }, 1379 | { 1380 | "/common/topic/alias":[], 1381 | "id":"/en/pc-ux", 1382 | "name":"PC-UX", 1383 | "type":"/computer/operating_system" 1384 | }, 1385 | { 1386 | "/common/topic/alias":[], 1387 | "id":"/en/mac_os_x_server_1_0", 1388 | "name":"Mac OS X Server 1.0", 1389 | "type":"/computer/operating_system" 1390 | }, 1391 | { 1392 | "/common/topic/alias":[], 1393 | "id":"/en/super-ux", 1394 | "name":"SUPER-UX", 1395 | "type":"/computer/operating_system" 1396 | }, 1397 | { 1398 | "/common/topic/alias":[], 1399 | "id":"/en/spring_operating_system", 1400 | "name":"Spring", 1401 | "type":"/computer/operating_system" 1402 | }, 1403 | { 1404 | "/common/topic/alias":[], 1405 | "id":"/en/cray_time_sharing_system", 1406 | "name":"Cray Time Sharing System", 1407 | "type":"/computer/operating_system" 1408 | }, 1409 | { 1410 | "/common/topic/alias":[ 1411 | "Linux devices", 1412 | "Linux based devices" 1413 | ], 1414 | "id":"/en/linux_devices", 1415 | "name":"Linux-powered device", 1416 | "type":"/computer/operating_system" 1417 | }, 1418 | { 1419 | "/common/topic/alias":[], 1420 | "id":"/wikipedia/en_title/Wheels_$0028operating_system$0029", 1421 | "name":"Wheels", 1422 | "type":"/computer/operating_system" 1423 | }, 1424 | { 1425 | "/common/topic/alias":[], 1426 | "id":"/en/openwrt", 1427 | "name":"OpenWrt", 1428 | "type":"/computer/operating_system" 1429 | }, 1430 | { 1431 | "/common/topic/alias":[], 1432 | "id":"/en/microempix", 1433 | "name":"MicroEmpix", 1434 | "type":"/computer/operating_system" 1435 | }, 1436 | { 1437 | "/common/topic/alias":[], 1438 | "id":"/en/windows_xp_64-bit_edition", 1439 | "name":"Windows XP 64-bit Edition", 1440 | "type":"/computer/operating_system" 1441 | }, 1442 | { 1443 | "/common/topic/alias":[], 1444 | "id":"/en/hivemind", 1445 | "name":"HiveMind", 1446 | "type":"/computer/operating_system" 1447 | }, 1448 | { 1449 | "/common/topic/alias":[], 1450 | "id":"/en/smartos", 1451 | "name":"SmartOS", 1452 | "type":"/computer/operating_system" 1453 | }, 1454 | { 1455 | "/common/topic/alias":[], 1456 | "id":"/en/asianux", 1457 | "name":"Asianux", 1458 | "type":"/computer/operating_system" 1459 | }, 1460 | { 1461 | "/common/topic/alias":[], 1462 | "id":"/en/vanguard_microkernel", 1463 | "name":"Vanguard", 1464 | "type":"/computer/operating_system" 1465 | }, 1466 | { 1467 | "/common/topic/alias":[], 1468 | "id":"/wikipedia/en_title/Minerva_$0028QDOS_reimplementation$0029", 1469 | "name":"Minerva", 1470 | "type":"/computer/operating_system" 1471 | }, 1472 | { 1473 | "/common/topic/alias":[], 1474 | "id":"/en/nukernel", 1475 | "name":"Nukernel", 1476 | "type":"/computer/operating_system" 1477 | }, 1478 | { 1479 | "/common/topic/alias":[], 1480 | "id":"/en/mac_os_x_v10_5", 1481 | "name":"Mac OS X Leopard", 1482 | "type":"/computer/operating_system" 1483 | }, 1484 | { 1485 | "/common/topic/alias":[], 1486 | "id":"/en/rc_4000_multiprogramming_system", 1487 | "name":"RC 4000 Multiprogramming System", 1488 | "type":"/computer/operating_system" 1489 | }, 1490 | { 1491 | "/common/topic/alias":[], 1492 | "id":"/en/foresight_linux", 1493 | "name":"Foresight Linux", 1494 | "type":"/computer/operating_system" 1495 | }, 1496 | { 1497 | "/common/topic/alias":[], 1498 | "id":"/en/dos_plus", 1499 | "name":"DOS Plus", 1500 | "type":"/computer/operating_system" 1501 | }, 1502 | { 1503 | "/common/topic/alias":[], 1504 | "id":"/en/singularity", 1505 | "name":"Singularity", 1506 | "type":"/computer/operating_system" 1507 | }, 1508 | { 1509 | "/common/topic/alias":[], 1510 | "id":"/en/jnode", 1511 | "name":"JNode", 1512 | "type":"/computer/operating_system" 1513 | }, 1514 | { 1515 | "/common/topic/alias":[], 1516 | "id":"/en/gnu_dos", 1517 | "name":"GNU/DOS", 1518 | "type":"/computer/operating_system" 1519 | }, 1520 | { 1521 | "/common/topic/alias":[], 1522 | "id":"/en/beos_r5", 1523 | "name":"BeOS R5", 1524 | "type":"/computer/operating_system" 1525 | }, 1526 | { 1527 | "/common/topic/alias":[], 1528 | "id":"/en/xinu", 1529 | "name":"Xinu", 1530 | "type":"/computer/operating_system" 1531 | }, 1532 | { 1533 | "/common/topic/alias":[], 1534 | "id":"/en/itron_project", 1535 | "name":"ITRON project", 1536 | "type":"/computer/operating_system" 1537 | }, 1538 | { 1539 | "/common/topic/alias":[], 1540 | "id":"/en/caos_linux", 1541 | "name":"CAOS Linux", 1542 | "type":"/computer/operating_system" 1543 | }, 1544 | { 1545 | "/common/topic/alias":[], 1546 | "id":"/en/freertos", 1547 | "name":"FreeRTOS", 1548 | "type":"/computer/operating_system" 1549 | }, 1550 | { 1551 | "/common/topic/alias":[], 1552 | "id":"/en/prex", 1553 | "name":"Prex", 1554 | "type":"/computer/operating_system" 1555 | }, 1556 | { 1557 | "/common/topic/alias":[], 1558 | "id":"/en/radix-50", 1559 | "name":"DEC Radix-50", 1560 | "type":"/computer/operating_system" 1561 | }, 1562 | { 1563 | "/common/topic/alias":[], 1564 | "id":"/en/alinux", 1565 | "name":"aLinux", 1566 | "type":"/computer/operating_system" 1567 | }, 1568 | { 1569 | "/common/topic/alias":[ 1570 | "Minislack" 1571 | ], 1572 | "id":"/en/zenwalk_linux", 1573 | "name":"Zenwalk", 1574 | "type":"/computer/operating_system" 1575 | }, 1576 | { 1577 | "/common/topic/alias":[ 1578 | "Nokia Series 40" 1579 | ], 1580 | "id":"/en/nokia_series_40", 1581 | "name":"Series 40", 1582 | "type":"/computer/operating_system" 1583 | }, 1584 | { 1585 | "/common/topic/alias":[ 1586 | "Longhorn Client" 1587 | ], 1588 | "id":"/en/windows_vista", 1589 | "name":"Windows Vista", 1590 | "type":"/computer/operating_system" 1591 | }, 1592 | { 1593 | "/common/topic/alias":[], 1594 | "id":"/en/frugalware", 1595 | "name":"Frugalware Linux", 1596 | "type":"/computer/operating_system" 1597 | }, 1598 | { 1599 | "/common/topic/alias":[], 1600 | "id":"/en/uniflex", 1601 | "name":"UniFLEX", 1602 | "type":"/computer/operating_system" 1603 | }, 1604 | { 1605 | "/common/topic/alias":[ 1606 | "Windows Server \"Longhown\"" 1607 | ], 1608 | "id":"/en/windows_server_longhorn", 1609 | "name":"Windows Server 2008", 1610 | "type":"/computer/operating_system" 1611 | }, 1612 | { 1613 | "/common/topic/alias":[], 1614 | "id":"/en/dos_xl", 1615 | "name":"DOS XL", 1616 | "type":"/computer/operating_system" 1617 | }, 1618 | { 1619 | "/common/topic/alias":[], 1620 | "id":"/en/opensuse", 1621 | "name":"openSUSE", 1622 | "type":"/computer/operating_system" 1623 | }, 1624 | { 1625 | "/common/topic/alias":[], 1626 | "id":"/en/amiqnx", 1627 | "name":"AmiQNX", 1628 | "type":"/computer/operating_system" 1629 | }, 1630 | { 1631 | "/common/topic/alias":[ 1632 | "Maemo Platform" 1633 | ], 1634 | "id":"/en/maemo", 1635 | "name":"Maemo", 1636 | "type":"/computer/operating_system" 1637 | }, 1638 | { 1639 | "/common/topic/alias":[], 1640 | "id":"/en/osx86", 1641 | "name":"OSx86", 1642 | "type":"/computer/operating_system" 1643 | }, 1644 | { 1645 | "/common/topic/alias":[], 1646 | "id":"/en/dg_ux", 1647 | "name":"DG/UX", 1648 | "type":"/computer/operating_system" 1649 | }, 1650 | { 1651 | "/common/topic/alias":[], 1652 | "id":"/en/phoenix-rtos", 1653 | "name":"Phoenix-RTOS", 1654 | "type":"/computer/operating_system" 1655 | }, 1656 | { 1657 | "/common/topic/alias":[], 1658 | "id":"/en/windows_preinstallation_environment", 1659 | "name":"Windows Preinstallation Environment", 1660 | "type":"/computer/operating_system" 1661 | }, 1662 | { 1663 | "/common/topic/alias":[], 1664 | "id":"/en/pardus", 1665 | "name":"Pardus", 1666 | "type":"/computer/operating_system" 1667 | }, 1668 | { 1669 | "/common/topic/alias":[], 1670 | "id":"/en/blag_linux_and_gnu", 1671 | "name":"BLAG Linux and GNU", 1672 | "type":"/computer/operating_system" 1673 | }, 1674 | { 1675 | "/common/topic/alias":[ 1676 | "Ubuntu Lite", 1677 | "Ubuntulite" 1678 | ], 1679 | "id":"/en/ubuntu_lite", 1680 | "name":"U-lite", 1681 | "type":"/computer/operating_system" 1682 | }, 1683 | { 1684 | "/common/topic/alias":[], 1685 | "id":"/wikipedia/en_title/Atomix_$0028operating_system$0029", 1686 | "name":"Atomix", 1687 | "type":"/computer/operating_system" 1688 | }, 1689 | { 1690 | "/common/topic/alias":[], 1691 | "id":"/en/freespire", 1692 | "name":"Freespire", 1693 | "type":"/computer/operating_system" 1694 | }, 1695 | { 1696 | "/common/topic/alias":[], 1697 | "id":"/en/gp2x", 1698 | "name":"GP2X", 1699 | "type":"/computer/operating_system" 1700 | }, 1701 | { 1702 | "/common/topic/alias":[], 1703 | "id":"/en/suse_linux_enterprise_server", 1704 | "name":"SUSE Linux Enterprise Server", 1705 | "type":"/computer/operating_system" 1706 | }, 1707 | { 1708 | "/common/topic/alias":[], 1709 | "id":"/wikipedia/en_title/$039CnOS", 1710 | "name":"\u03bcnOS", 1711 | "type":"/computer/operating_system" 1712 | }, 1713 | { 1714 | "/common/topic/alias":[], 1715 | "id":"/en/vaxeln", 1716 | "name":"VAXELN", 1717 | "type":"/computer/operating_system" 1718 | }, 1719 | { 1720 | "/common/topic/alias":[], 1721 | "id":"/en/venix", 1722 | "name":"Venix", 1723 | "type":"/computer/operating_system" 1724 | }, 1725 | { 1726 | "/common/topic/alias":[], 1727 | "id":"/wikipedia/it_id/654644", 1728 | "name":"IX", 1729 | "type":"/computer/operating_system" 1730 | }, 1731 | { 1732 | "/common/topic/alias":[], 1733 | "id":"/en/research_unix", 1734 | "name":"Research Unix", 1735 | "type":"/computer/operating_system" 1736 | }, 1737 | { 1738 | "/common/topic/alias":[], 1739 | "id":"/en/xubuntu", 1740 | "name":"Xubuntu", 1741 | "type":"/computer/operating_system" 1742 | }, 1743 | { 1744 | "/common/topic/alias":[], 1745 | "id":"/wikipedia/es/TRIX", 1746 | "name":"Trix", 1747 | "type":"/computer/operating_system" 1748 | }, 1749 | { 1750 | "/common/topic/alias":[], 1751 | "id":"/en/sinix", 1752 | "name":"SINIX", 1753 | "type":"/computer/operating_system" 1754 | }, 1755 | { 1756 | "/common/topic/alias":[], 1757 | "id":"/en/pentoo", 1758 | "name":"Pentoo", 1759 | "type":"/computer/operating_system" 1760 | }, 1761 | { 1762 | "/common/topic/alias":[], 1763 | "id":"/en/acorn_mos", 1764 | "name":"Acorn MOS", 1765 | "type":"/computer/operating_system" 1766 | }, 1767 | { 1768 | "/common/topic/alias":[], 1769 | "id":"/en/goblinx", 1770 | "name":"GoblinX", 1771 | "type":"/computer/operating_system" 1772 | }, 1773 | { 1774 | "/common/topic/alias":[ 1775 | "Caixa Magica" 1776 | ], 1777 | "id":"/en/caixa_magica", 1778 | "name":"Caixa M\u00e1gica", 1779 | "type":"/computer/operating_system" 1780 | }, 1781 | { 1782 | "/common/topic/alias":[], 1783 | "id":"/en/annvix", 1784 | "name":"Annvix", 1785 | "type":"/computer/operating_system" 1786 | }, 1787 | { 1788 | "/common/topic/alias":[], 1789 | "id":"/en/sanos", 1790 | "name":"Sanos", 1791 | "type":"/computer/operating_system" 1792 | }, 1793 | { 1794 | "/common/topic/alias":[], 1795 | "id":"/en/coyotos", 1796 | "name":"Coyotos", 1797 | "type":"/computer/operating_system" 1798 | }, 1799 | { 1800 | "/common/topic/alias":[ 1801 | "Cross Media Bar" 1802 | ], 1803 | "id":"/en/cross_media_bar", 1804 | "name":"XrossMediaBar", 1805 | "type":"/computer/operating_system" 1806 | }, 1807 | { 1808 | "/common/topic/alias":[ 1809 | "RR4" 1810 | ], 1811 | "id":"/en/sabayonlinux", 1812 | "name":"Sabayon Linux", 1813 | "type":"/computer/operating_system" 1814 | }, 1815 | { 1816 | "/common/topic/alias":[], 1817 | "id":"/en/ntoskrnl_exe", 1818 | "name":"ntoskrnl.exe", 1819 | "type":"/computer/operating_system" 1820 | }, 1821 | { 1822 | "/common/topic/alias":[], 1823 | "id":"/en/goobuntu", 1824 | "name":"Goobuntu", 1825 | "type":"/computer/operating_system" 1826 | }, 1827 | { 1828 | "/common/topic/alias":[], 1829 | "id":"/en/catos", 1830 | "name":"CatOS", 1831 | "type":"/computer/operating_system" 1832 | }, 1833 | { 1834 | "/common/topic/alias":[], 1835 | "id":"/en/helenos", 1836 | "name":"HelenOS", 1837 | "type":"/computer/operating_system" 1838 | }, 1839 | { 1840 | "/common/topic/alias":[], 1841 | "id":"/en/demos", 1842 | "name":"DEMOS", 1843 | "type":"/computer/operating_system" 1844 | }, 1845 | { 1846 | "/common/topic/alias":[], 1847 | "id":"/en/kororaa", 1848 | "name":"Korora", 1849 | "type":"/computer/operating_system" 1850 | }, 1851 | { 1852 | "/common/topic/alias":[], 1853 | "id":"/en/vine_linux", 1854 | "name":"Vine Linux", 1855 | "type":"/computer/operating_system" 1856 | }, 1857 | { 1858 | "/common/topic/alias":[], 1859 | "id":"/en/tud_os", 1860 | "name":"TUD:OS", 1861 | "type":"/computer/operating_system" 1862 | }, 1863 | { 1864 | "/common/topic/alias":[], 1865 | "id":"/en/pintos", 1866 | "name":"Pintos", 1867 | "type":"/computer/operating_system" 1868 | }, 1869 | { 1870 | "/common/topic/alias":[], 1871 | "id":"/en/plurix", 1872 | "name":"Plurix", 1873 | "type":"/computer/operating_system" 1874 | }, 1875 | { 1876 | "/common/topic/alias":[], 1877 | "id":"/en/capros", 1878 | "name":"CapROS", 1879 | "type":"/computer/operating_system" 1880 | }, 1881 | { 1882 | "/common/topic/alias":[], 1883 | "id":"/en/interactive_unix", 1884 | "name":"Interactive Unix", 1885 | "type":"/computer/operating_system" 1886 | }, 1887 | { 1888 | "/common/topic/alias":[], 1889 | "id":"/en/tinykrnl", 1890 | "name":"TinyKRNL", 1891 | "type":"/computer/operating_system" 1892 | }, 1893 | { 1894 | "/common/topic/alias":[], 1895 | "id":"/en/xandros_server", 1896 | "name":"Xandros Server", 1897 | "type":"/computer/operating_system" 1898 | }, 1899 | { 1900 | "/common/topic/alias":[], 1901 | "id":"/en/hpbsd", 1902 | "name":"HPBSD", 1903 | "type":"/computer/operating_system" 1904 | }, 1905 | { 1906 | "/common/topic/alias":[], 1907 | "id":"/en/mcnlive", 1908 | "name":"MCNLive", 1909 | "type":"/computer/operating_system" 1910 | }, 1911 | { 1912 | "/common/topic/alias":[], 1913 | "id":"/wikipedia/en_title/TUNIS", 1914 | "name":"TUNIS", 1915 | "type":"/computer/operating_system" 1916 | }, 1917 | { 1918 | "/common/topic/alias":[], 1919 | "id":"/en/argante", 1920 | "name":"Argante", 1921 | "type":"/computer/operating_system" 1922 | }, 1923 | { 1924 | "/common/topic/alias":[], 1925 | "id":"/en/minix_3", 1926 | "name":"MINIX 3", 1927 | "type":"/computer/operating_system" 1928 | }, 1929 | { 1930 | "/common/topic/alias":[ 1931 | "Auditor Security Collection" 1932 | ], 1933 | "id":"/en/backtrack", 1934 | "name":"BackTrack", 1935 | "type":"/computer/operating_system" 1936 | }, 1937 | { 1938 | "/common/topic/alias":[], 1939 | "id":"/en/vps_vm", 1940 | "name":"VPS/VM", 1941 | "type":"/computer/operating_system" 1942 | }, 1943 | { 1944 | "/common/topic/alias":[], 1945 | "id":"/en/dex4u", 1946 | "name":"DexOS", 1947 | "type":"/computer/operating_system" 1948 | }, 1949 | { 1950 | "/common/topic/alias":[], 1951 | "id":"/en/minix-vmd", 1952 | "name":"Minix-vmd", 1953 | "type":"/computer/operating_system" 1954 | }, 1955 | { 1956 | "/common/topic/alias":[], 1957 | "id":"/en/aurora_sparc_linux", 1958 | "name":"Aurora SPARC Linux", 1959 | "type":"/computer/operating_system" 1960 | }, 1961 | { 1962 | "/common/topic/alias":[], 1963 | "id":"/en/pikeos", 1964 | "name":"PikeOS", 1965 | "type":"/computer/operating_system" 1966 | }, 1967 | { 1968 | "/common/topic/alias":[], 1969 | "id":"/en/btron", 1970 | "name":"BTRON", 1971 | "type":"/computer/operating_system" 1972 | }, 1973 | { 1974 | "/common/topic/alias":[], 1975 | "id":"/en/rocks_cluster_distribution", 1976 | "name":"Rocks Cluster Distribution", 1977 | "type":"/computer/operating_system" 1978 | }, 1979 | { 1980 | "/common/topic/alias":[], 1981 | "id":"/en/fluxbuntu", 1982 | "name":"Fluxbuntu", 1983 | "type":"/computer/operating_system" 1984 | }, 1985 | { 1986 | "/common/topic/alias":[ 1987 | "Linux", 1988 | "GNU+Linux" 1989 | ], 1990 | "id":"/en/linux", 1991 | "name":"GNU/Linux", 1992 | "type":"/computer/operating_system" 1993 | }, 1994 | { 1995 | "/common/topic/alias":[], 1996 | "id":"/en/meikos", 1997 | "name":"MeikOS", 1998 | "type":"/computer/operating_system" 1999 | }, 2000 | { 2001 | "/common/topic/alias":[], 2002 | "id":"/wikipedia/en_title/Nemesis_$0028operating_system$0029", 2003 | "name":"Nemesis", 2004 | "type":"/computer/operating_system" 2005 | }, 2006 | { 2007 | "/common/topic/alias":[], 2008 | "id":"/en/symbos", 2009 | "name":"SymbOS", 2010 | "type":"/computer/operating_system" 2011 | }, 2012 | { 2013 | "/common/topic/alias":[], 2014 | "id":"/en/tuga", 2015 | "name":"Tuga", 2016 | "type":"/computer/operating_system" 2017 | }, 2018 | { 2019 | "/common/topic/alias":[], 2020 | "id":"/en/dreamlinux", 2021 | "name":"Dreamlinux", 2022 | "type":"/computer/operating_system" 2023 | }, 2024 | { 2025 | "/common/topic/alias":[], 2026 | "id":"/en/vsta", 2027 | "name":"VSTa", 2028 | "type":"/computer/operating_system" 2029 | }, 2030 | { 2031 | "/common/topic/alias":[], 2032 | "id":"/en/hdos", 2033 | "name":"HDOS", 2034 | "type":"/computer/operating_system" 2035 | }, 2036 | { 2037 | "/common/topic/alias":[], 2038 | "id":"/wikipedia/ru_id/1673683", 2039 | "name":"CDC SCOPE", 2040 | "type":"/computer/operating_system" 2041 | }, 2042 | { 2043 | "/common/topic/alias":[], 2044 | "id":"/en/linkat", 2045 | "name":"Linkat", 2046 | "type":"/computer/operating_system" 2047 | }, 2048 | { 2049 | "/common/topic/alias":[], 2050 | "id":"/en/elive", 2051 | "name":"Elive", 2052 | "type":"/computer/operating_system" 2053 | }, 2054 | { 2055 | "/common/topic/alias":[], 2056 | "id":"/en/windows_xp_home_edition", 2057 | "name":"Windows XP Home Edition", 2058 | "type":"/computer/operating_system" 2059 | }, 2060 | { 2061 | "/common/topic/alias":[], 2062 | "id":"/en/windows_xp_professional", 2063 | "name":"Windows XP Professional", 2064 | "type":"/computer/operating_system" 2065 | }, 2066 | { 2067 | "/common/topic/alias":[], 2068 | "id":"/m/01xrh57", 2069 | "name":"Windows XP Tablet PC Edition", 2070 | "type":"/computer/operating_system" 2071 | }, 2072 | { 2073 | "/common/topic/alias":[], 2074 | "id":"/en/windows_xp_starter_edition", 2075 | "name":"Windows XP Starter Edition", 2076 | "type":"/computer/operating_system" 2077 | }, 2078 | { 2079 | "/common/topic/alias":[], 2080 | "id":"/en/windows_2000_datacenter_server", 2081 | "name":"Windows 2000 Datacenter Server", 2082 | "type":"/computer/operating_system" 2083 | }, 2084 | { 2085 | "/common/topic/alias":[], 2086 | "id":"/en/windows_2000_advanced_server", 2087 | "name":"Windows 2000 Advanced Server", 2088 | "type":"/computer/operating_system" 2089 | }, 2090 | { 2091 | "/common/topic/alias":[], 2092 | "id":"/en/windows_2000_server", 2093 | "name":"Windows 2000 Server", 2094 | "type":"/computer/operating_system" 2095 | }, 2096 | { 2097 | "/common/topic/alias":[], 2098 | "id":"/en/windows_2000_professional", 2099 | "name":"Windows 2000 Professional", 2100 | "type":"/computer/operating_system" 2101 | }, 2102 | { 2103 | "/common/topic/alias":[], 2104 | "id":"/en/windows_2000_advanced_server_limited_edition", 2105 | "name":"Windows 2000 Advanced Server Limited Edition", 2106 | "type":"/computer/operating_system" 2107 | }, 2108 | { 2109 | "/common/topic/alias":[], 2110 | "id":"/en/ms_dos_1_25", 2111 | "name":"MS-DOS 1.25", 2112 | "type":"/computer/operating_system" 2113 | }, 2114 | { 2115 | "/common/topic/alias":[], 2116 | "id":"/en/ms_dos_2_0", 2117 | "name":"MS-DOS 2.0", 2118 | "type":"/computer/operating_system" 2119 | }, 2120 | { 2121 | "/common/topic/alias":[], 2122 | "id":"/en/ms_dos_3_0", 2123 | "name":"MS-DOS 3.0", 2124 | "type":"/computer/operating_system" 2125 | }, 2126 | { 2127 | "/common/topic/alias":[], 2128 | "id":"/en/ms_dos_4_0", 2129 | "name":"MS-DOS 4.0", 2130 | "type":"/computer/operating_system" 2131 | }, 2132 | { 2133 | "/common/topic/alias":[], 2134 | "id":"/en/ms_dos_5_0", 2135 | "name":"MS-DOS 5.0", 2136 | "type":"/computer/operating_system" 2137 | }, 2138 | { 2139 | "/common/topic/alias":[], 2140 | "id":"/en/ms_dos_6_0", 2141 | "name":"MS-DOS 6.0", 2142 | "type":"/computer/operating_system" 2143 | }, 2144 | { 2145 | "/common/topic/alias":[], 2146 | "id":"/en/ms_dos_7_0", 2147 | "name":"MS-DOS 7.0", 2148 | "type":"/computer/operating_system" 2149 | }, 2150 | { 2151 | "/common/topic/alias":[], 2152 | "id":"/en/ms_dos_8_0", 2153 | "name":"MS-DOS 8.0", 2154 | "type":"/computer/operating_system" 2155 | }, 2156 | { 2157 | "/common/topic/alias":[], 2158 | "id":"/en/pc_dos_2000", 2159 | "name":"PC DOS 2000", 2160 | "type":"/computer/operating_system" 2161 | }, 2162 | { 2163 | "/common/topic/alias":[], 2164 | "id":"/en/pc_dos_7_0", 2165 | "name":"PC DOS 7.0", 2166 | "type":"/computer/operating_system" 2167 | }, 2168 | { 2169 | "/common/topic/alias":[], 2170 | "id":"/en/pc_dos_6_0", 2171 | "name":"PC DOS 6.0", 2172 | "type":"/computer/operating_system" 2173 | }, 2174 | { 2175 | "/common/topic/alias":[], 2176 | "id":"/en/pc_dos_5_0", 2177 | "name":"PC DOS 5.0", 2178 | "type":"/computer/operating_system" 2179 | }, 2180 | { 2181 | "/common/topic/alias":[], 2182 | "id":"/en/pc_dos_4_0", 2183 | "name":"PC DOS 4.0", 2184 | "type":"/computer/operating_system" 2185 | }, 2186 | { 2187 | "/common/topic/alias":[], 2188 | "id":"/en/pc_dos_3_3", 2189 | "name":"PC DOS 3.3", 2190 | "type":"/computer/operating_system" 2191 | }, 2192 | { 2193 | "/common/topic/alias":[], 2194 | "id":"/en/pc_dos_2_0", 2195 | "name":"PC DOS 2.0", 2196 | "type":"/computer/operating_system" 2197 | }, 2198 | { 2199 | "/common/topic/alias":[], 2200 | "id":"/en/pc_dos_1_0", 2201 | "name":"PC DOS 1.0", 2202 | "type":"/computer/operating_system" 2203 | }, 2204 | { 2205 | "/common/topic/alias":[], 2206 | "id":"/en/amiga_os_2_0", 2207 | "name":"Amiga OS 2.0", 2208 | "type":"/computer/operating_system" 2209 | }, 2210 | { 2211 | "/common/topic/alias":[], 2212 | "id":"/en/fermi_linux", 2213 | "name":"Fermi Linux", 2214 | "type":"/computer/operating_system" 2215 | }, 2216 | { 2217 | "/common/topic/alias":[], 2218 | "id":"/en/mythdora", 2219 | "name":"MythDora", 2220 | "type":"/computer/operating_system" 2221 | }, 2222 | { 2223 | "/common/topic/alias":[], 2224 | "id":"/en/usix", 2225 | "name":"USIX", 2226 | "type":"/computer/operating_system" 2227 | }, 2228 | { 2229 | "/common/topic/alias":[], 2230 | "id":"/wikipedia/en_title/House_$0028operating_system$0029", 2231 | "name":"House", 2232 | "type":"/computer/operating_system" 2233 | }, 2234 | { 2235 | "/common/topic/alias":[], 2236 | "id":"/en/suse_linux_distributions", 2237 | "name":"SUSE Linux distributions", 2238 | "type":"/computer/operating_system" 2239 | }, 2240 | { 2241 | "/common/topic/alias":[], 2242 | "id":"/en/is_dos", 2243 | "name":"IS-DOS", 2244 | "type":"/computer/operating_system" 2245 | }, 2246 | { 2247 | "/common/topic/alias":[], 2248 | "id":"/en/tr_dos", 2249 | "name":"TR-DOS", 2250 | "type":"/computer/operating_system" 2251 | }, 2252 | { 2253 | "/common/topic/alias":[], 2254 | "id":"/en/soft_hard_real_time_kernel", 2255 | "name":"Soft Hard Real-Time Kernel", 2256 | "type":"/computer/operating_system" 2257 | }, 2258 | { 2259 | "/common/topic/alias":[], 2260 | "id":"/en/linux_mint", 2261 | "name":"Linux Mint", 2262 | "type":"/computer/operating_system" 2263 | }, 2264 | { 2265 | "/common/topic/alias":[], 2266 | "id":"/wikipedia/ru/CDC_NOS", 2267 | "name":"NOS", 2268 | "type":"/computer/operating_system" 2269 | }, 2270 | { 2271 | "/common/topic/alias":[], 2272 | "id":"/en/sidux", 2273 | "name":"aptosid", 2274 | "type":"/computer/operating_system" 2275 | }, 2276 | { 2277 | "/common/topic/alias":[], 2278 | "id":"/en/ubuntu_studio", 2279 | "name":"Ubuntu Studio", 2280 | "type":"/computer/operating_system" 2281 | }, 2282 | { 2283 | "/common/topic/alias":[], 2284 | "id":"/en/unix_ns", 2285 | "name":"Unix/NS", 2286 | "type":"/computer/operating_system" 2287 | }, 2288 | { 2289 | "/common/topic/alias":[], 2290 | "id":"/en/osf_1", 2291 | "name":"OSF/1", 2292 | "type":"/computer/operating_system" 2293 | }, 2294 | { 2295 | "/common/topic/alias":[], 2296 | "id":"/en/freebsd_1_x", 2297 | "name":"FreeBSD 1.x", 2298 | "type":"/computer/operating_system" 2299 | }, 2300 | { 2301 | "/common/topic/alias":[], 2302 | "id":"/en/freebsd_1_0", 2303 | "name":"FreeBSD 1.0", 2304 | "type":"/computer/operating_system" 2305 | }, 2306 | { 2307 | "/common/topic/alias":[], 2308 | "id":"/en/freebsd_1_1", 2309 | "name":"FreeBSD 1.1", 2310 | "type":"/computer/operating_system" 2311 | }, 2312 | { 2313 | "/common/topic/alias":[], 2314 | "id":"/en/freebsd_1_1_5", 2315 | "name":"FreeBSD 1.1.5", 2316 | "type":"/computer/operating_system" 2317 | }, 2318 | { 2319 | "/common/topic/alias":[], 2320 | "id":"/en/freebsd_1_1_5_1", 2321 | "name":"FreeBSD 1.1.5.1", 2322 | "type":"/computer/operating_system" 2323 | }, 2324 | { 2325 | "/common/topic/alias":[], 2326 | "id":"/en/freebsd_2_x", 2327 | "name":"FreeBSD 2.x", 2328 | "type":"/computer/operating_system" 2329 | }, 2330 | { 2331 | "/common/topic/alias":[], 2332 | "id":"/en/freebsd_2_0", 2333 | "name":"FreeBSD 2.0", 2334 | "type":"/computer/operating_system" 2335 | }, 2336 | { 2337 | "/common/topic/alias":[], 2338 | "id":"/en/freebsd_2_0_5", 2339 | "name":"FreeBSD 2.0.5", 2340 | "type":"/computer/operating_system" 2341 | }, 2342 | { 2343 | "/common/topic/alias":[], 2344 | "id":"/en/freebsd_2_1", 2345 | "name":"FreeBSD 2.1", 2346 | "type":"/computer/operating_system" 2347 | }, 2348 | { 2349 | "/common/topic/alias":[], 2350 | "id":"/en/freebsd_2_1_5", 2351 | "name":"FreeBSD 2.1.5", 2352 | "type":"/computer/operating_system" 2353 | }, 2354 | { 2355 | "/common/topic/alias":[], 2356 | "id":"/en/freebsd_2_1_6", 2357 | "name":"FreeBSD 2.1.6", 2358 | "type":"/computer/operating_system" 2359 | }, 2360 | { 2361 | "/common/topic/alias":[], 2362 | "id":"/en/freebsd_2_1_7", 2363 | "name":"FreeBSD 2.1.7", 2364 | "type":"/computer/operating_system" 2365 | }, 2366 | { 2367 | "/common/topic/alias":[], 2368 | "id":"/en/freebsd_2_2", 2369 | "name":"FreeBSD 2.2", 2370 | "type":"/computer/operating_system" 2371 | }, 2372 | { 2373 | "/common/topic/alias":[], 2374 | "id":"/en/freebsd_2_2_1", 2375 | "name":"FreeBSD 2.2.1", 2376 | "type":"/computer/operating_system" 2377 | }, 2378 | { 2379 | "/common/topic/alias":[], 2380 | "id":"/en/freebsd_2_2_2", 2381 | "name":"FreeBSD 2.2.2", 2382 | "type":"/computer/operating_system" 2383 | }, 2384 | { 2385 | "/common/topic/alias":[], 2386 | "id":"/en/freebsd_2_2_5", 2387 | "name":"FreeBSD 2.2.5", 2388 | "type":"/computer/operating_system" 2389 | }, 2390 | { 2391 | "/common/topic/alias":[ 2392 | "JOLIX" 2393 | ], 2394 | "id":"/en/386bsd", 2395 | "name":"386BSD", 2396 | "type":"/computer/operating_system" 2397 | }, 2398 | { 2399 | "/common/topic/alias":[], 2400 | "id":"/en/freebsd_4_8", 2401 | "name":"FreeBSD 4.8", 2402 | "type":"/computer/operating_system" 2403 | }, 2404 | { 2405 | "/common/topic/alias":[], 2406 | "id":"/en/4_3bsd_net_2", 2407 | "name":"4.3BSD NET/2", 2408 | "type":"/computer/operating_system" 2409 | }, 2410 | { 2411 | "/common/topic/alias":[], 2412 | "id":"/en/freebsd_4_x", 2413 | "name":"FreeBSD 4.x", 2414 | "type":"/computer/operating_system" 2415 | }, 2416 | { 2417 | "/common/topic/alias":[ 2418 | "AutoCAD" 2419 | ], 2420 | "id":"/en/autocad", 2421 | "name":"Autocad", 2422 | "type":"/computer/operating_system" 2423 | }, 2424 | { 2425 | "/common/topic/alias":[], 2426 | "id":"/en/fedora_7", 2427 | "name":"Fedora 7", 2428 | "type":"/computer/operating_system" 2429 | }, 2430 | { 2431 | "/common/topic/alias":[], 2432 | "id":"/en/fedora_core_1", 2433 | "name":"Fedora Core 1", 2434 | "type":"/computer/operating_system" 2435 | }, 2436 | { 2437 | "/common/topic/alias":[], 2438 | "id":"/en/fedora_core_2", 2439 | "name":"Fedora Core 2", 2440 | "type":"/computer/operating_system" 2441 | }, 2442 | { 2443 | "/common/topic/alias":[], 2444 | "id":"/en/fedora_core_3", 2445 | "name":"Fedora Core 3", 2446 | "type":"/computer/operating_system" 2447 | }, 2448 | { 2449 | "/common/topic/alias":[], 2450 | "id":"/en/fedora_core_4", 2451 | "name":"Fedora Core 4", 2452 | "type":"/computer/operating_system" 2453 | }, 2454 | { 2455 | "/common/topic/alias":[], 2456 | "id":"/en/fedora_core_6", 2457 | "name":"Fedora Core 6", 2458 | "type":"/computer/operating_system" 2459 | }, 2460 | { 2461 | "/common/topic/alias":[], 2462 | "id":"/en/windows_server", 2463 | "name":"Windows Server", 2464 | "type":"/computer/operating_system" 2465 | }, 2466 | { 2467 | "/common/topic/alias":[], 2468 | "id":"/en/msx_dos", 2469 | "name":"MSX-DOS", 2470 | "type":"/computer/operating_system" 2471 | }, 2472 | { 2473 | "/common/topic/alias":[ 2474 | "Fedora Core" 2475 | ], 2476 | "id":"/en/fedora", 2477 | "name":"Fedora", 2478 | "type":"/computer/operating_system" 2479 | }, 2480 | { 2481 | "/common/topic/alias":[], 2482 | "id":"/en/sam_linux", 2483 | "name":"SAM Linux", 2484 | "type":"/computer/operating_system" 2485 | }, 2486 | { 2487 | "/common/topic/alias":[], 2488 | "id":"/en/talon_dsp_rtos", 2489 | "name":"Talon DSP RTOS", 2490 | "type":"/computer/operating_system" 2491 | }, 2492 | { 2493 | "/common/topic/alias":[], 2494 | "id":"/wikipedia/de_id/2997683", 2495 | "name":"JX", 2496 | "type":"/computer/operating_system" 2497 | }, 2498 | { 2499 | "/common/topic/alias":[], 2500 | "id":"/en/csi_dos", 2501 | "name":"CSI-DOS", 2502 | "type":"/computer/operating_system" 2503 | }, 2504 | { 2505 | "/common/topic/alias":[], 2506 | "id":"/en/bkunix", 2507 | "name":"BKUNIX", 2508 | "type":"/computer/operating_system" 2509 | }, 2510 | { 2511 | "/common/topic/alias":[], 2512 | "id":"/en/mnos", 2513 | "name":"MNOS", 2514 | "type":"/computer/operating_system" 2515 | }, 2516 | { 2517 | "/common/topic/alias":[], 2518 | "id":"/en/aros_research_operating_system", 2519 | "name":"AROS Research Operating System", 2520 | "type":"/computer/operating_system" 2521 | }, 2522 | { 2523 | "/common/topic/alias":[], 2524 | "id":"/wikipedia/ru_id/741719", 2525 | "name":"OZONE", 2526 | "type":"/computer/operating_system" 2527 | }, 2528 | { 2529 | "/common/topic/alias":[], 2530 | "id":"/en/fmi_os", 2531 | "name":"FMI/OS", 2532 | "type":"/computer/operating_system" 2533 | }, 2534 | { 2535 | "/common/topic/alias":[], 2536 | "id":"/wikipedia/en_title/Hydra_$0028operating_system$0029", 2537 | "name":"Hydra", 2538 | "type":"/computer/operating_system" 2539 | }, 2540 | { 2541 | "/common/topic/alias":[], 2542 | "id":"/en/kaneton", 2543 | "name":"Kaneton", 2544 | "type":"/computer/operating_system" 2545 | }, 2546 | { 2547 | "/common/topic/alias":[], 2548 | "id":"/en/amazon_elastic_compute_cloud", 2549 | "name":"Amazon Elastic Compute Cloud", 2550 | "type":"/computer/operating_system" 2551 | }, 2552 | { 2553 | "/common/topic/alias":[], 2554 | "id":"/en/mythbuntu", 2555 | "name":"Mythbuntu", 2556 | "type":"/computer/operating_system" 2557 | }, 2558 | { 2559 | "/common/topic/alias":[ 2560 | "PlayStation 3 System Software" 2561 | ], 2562 | "id":"/en/playstation_3_system_software", 2563 | "name":"PlayStation 3 system software", 2564 | "type":"/computer/operating_system" 2565 | }, 2566 | { 2567 | "/common/topic/alias":[], 2568 | "id":"/wikipedia/en_title/GeckOS", 2569 | "name":"GeckOS", 2570 | "type":"/computer/operating_system" 2571 | }, 2572 | { 2573 | "/common/topic/alias":[], 2574 | "id":"/wikipedia/ru_id/1558243", 2575 | "name":"Pilot", 2576 | "type":"/computer/operating_system" 2577 | }, 2578 | { 2579 | "/common/topic/alias":[], 2580 | "id":"/en/windows_vista_home_basic", 2581 | "name":"Windows Vista Home Basic", 2582 | "type":"/computer/operating_system" 2583 | }, 2584 | { 2585 | "/common/topic/alias":[], 2586 | "id":"/en/windows_vista_home_premium", 2587 | "name":"Windows Vista Home Premium", 2588 | "type":"/computer/operating_system" 2589 | }, 2590 | { 2591 | "/common/topic/alias":[], 2592 | "id":"/en/windows_vista_business", 2593 | "name":"Windows Vista Business", 2594 | "type":"/computer/operating_system" 2595 | }, 2596 | { 2597 | "/common/topic/alias":[], 2598 | "id":"/en/windows_vista_ultimate", 2599 | "name":"Windows Vista Ultimate", 2600 | "type":"/computer/operating_system" 2601 | }, 2602 | { 2603 | "/common/topic/alias":[], 2604 | "id":"/en/kolibrios", 2605 | "name":"KolibriOS", 2606 | "type":"/computer/operating_system" 2607 | }, 2608 | { 2609 | "/common/topic/alias":[], 2610 | "id":"/wikipedia/en_title/SPIN_$0028operating_system$0029", 2611 | "name":"SPIN", 2612 | "type":"/computer/operating_system" 2613 | }, 2614 | { 2615 | "/common/topic/alias":[ 2616 | "DOS/BATCH 11" 2617 | ], 2618 | "id":"/en/dec_batch_11_dos_11", 2619 | "name":"DEC BATCH-11/DOS-11", 2620 | "type":"/computer/operating_system" 2621 | }, 2622 | { 2623 | "/common/topic/alias":[], 2624 | "id":"/en/dspnano_rtos", 2625 | "name":"DSPnano RTOS", 2626 | "type":"/computer/operating_system" 2627 | }, 2628 | { 2629 | "/common/topic/alias":[ 2630 | "Android OS" 2631 | ], 2632 | "id":"/en/gphone", 2633 | "name":"Android", 2634 | "type":"/computer/operating_system" 2635 | }, 2636 | { 2637 | "/common/topic/alias":[], 2638 | "id":"/en/tss_8", 2639 | "name":"TSS-8", 2640 | "type":"/computer/operating_system" 2641 | }, 2642 | { 2643 | "/common/topic/alias":[ 2644 | "Test os" 2645 | ], 2646 | "id":"/en/test_os", 2647 | "name":"Test OS", 2648 | "type":"/computer/operating_system" 2649 | }, 2650 | { 2651 | "/common/topic/alias":[], 2652 | "id":"/en/share_operating_system", 2653 | "name":"SHARE Operating System", 2654 | "type":"/computer/operating_system" 2655 | }, 2656 | { 2657 | "/common/topic/alias":[], 2658 | "id":"/en/symbian_os_9_1", 2659 | "name":"Symbian OS 9.1", 2660 | "type":"/computer/operating_system" 2661 | }, 2662 | { 2663 | "/common/topic/alias":[], 2664 | "id":"/m/02_7mg3", 2665 | "name":"TRAX", 2666 | "type":"/computer/operating_system" 2667 | }, 2668 | { 2669 | "/common/topic/alias":[], 2670 | "id":"/en/openmamba", 2671 | "name":"Openmamba", 2672 | "type":"/computer/operating_system" 2673 | }, 2674 | { 2675 | "/common/topic/alias":[], 2676 | "id":"/en/dos_vs", 2677 | "name":"DOS/VS", 2678 | "type":"/computer/operating_system" 2679 | }, 2680 | { 2681 | "/common/topic/alias":[], 2682 | "id":"/en/losethos", 2683 | "name":"LoseThos", 2684 | "type":"/computer/operating_system" 2685 | }, 2686 | { 2687 | "/common/topic/alias":[], 2688 | "id":"/en/ibm_4690_os", 2689 | "name":"4690 Operating System", 2690 | "type":"/computer/operating_system" 2691 | }, 2692 | { 2693 | "/common/topic/alias":[], 2694 | "id":"/en/phoenix_os", 2695 | "name":"Phoenix OS", 2696 | "type":"/computer/operating_system" 2697 | }, 2698 | { 2699 | "/common/topic/alias":[], 2700 | "id":"/en/chibios_rt", 2701 | "name":"ChibiOS/RT", 2702 | "type":"/computer/operating_system" 2703 | }, 2704 | { 2705 | "/common/topic/alias":[], 2706 | "id":"/wikipedia/en_title/Es_$0028operating_system$0029", 2707 | "name":"es", 2708 | "type":"/computer/operating_system" 2709 | }, 2710 | { 2711 | "/common/topic/alias":[], 2712 | "id":"/en/enterprisebsd", 2713 | "name":"EnterpriseBSD", 2714 | "type":"/computer/operating_system" 2715 | }, 2716 | { 2717 | "/common/topic/alias":[ 2718 | "RSDOS" 2719 | ], 2720 | "id":"/en/disk_extended_color_basic", 2721 | "name":"Disk Extended Color Basic", 2722 | "type":"/computer/operating_system" 2723 | }, 2724 | { 2725 | "/common/topic/alias":[ 2726 | "Geubuntu" 2727 | ], 2728 | "id":"/en/opengeu", 2729 | "name":"OpenGEU", 2730 | "type":"/computer/operating_system" 2731 | }, 2732 | { 2733 | "/common/topic/alias":[], 2734 | "id":"/wikipedia/de_id/4282247", 2735 | "name":"Pandora", 2736 | "type":"/computer/operating_system" 2737 | }, 2738 | { 2739 | "/common/topic/alias":[], 2740 | "id":"/en/windows_mobile_smartphone", 2741 | "name":"Windows Mobile Smartphone", 2742 | "type":"/computer/operating_system" 2743 | }, 2744 | { 2745 | "/common/topic/alias":[], 2746 | "id":"/wikipedia/ru_id/125914", 2747 | "name":"Miraculix", 2748 | "type":"/computer/operating_system" 2749 | }, 2750 | { 2751 | "/common/topic/alias":[], 2752 | "id":"/en/tinyme", 2753 | "name":"TinyMe", 2754 | "type":"/computer/operating_system" 2755 | }, 2756 | { 2757 | "/common/topic/alias":[], 2758 | "id":"/wikipedia/it/Cosmos_$0028sistema_operativo$0029", 2759 | "name":"Cosmos", 2760 | "type":"/computer/operating_system" 2761 | }, 2762 | { 2763 | "/common/topic/alias":[], 2764 | "id":"/en/kayou", 2765 | "name":"Kayou", 2766 | "type":"/computer/operating_system" 2767 | }, 2768 | { 2769 | "/common/topic/alias":[], 2770 | "id":"/en/fusion_rtos", 2771 | "name":"Fusion RTOS", 2772 | "type":"/computer/operating_system" 2773 | }, 2774 | { 2775 | "/common/topic/alias":[], 2776 | "id":"/en/windows_server_2008_r2", 2777 | "name":"Windows Server 2008 R2", 2778 | "type":"/computer/operating_system" 2779 | }, 2780 | { 2781 | "/common/topic/alias":[ 2782 | "iPhone OS" 2783 | ], 2784 | "id":"/en/iphone_os", 2785 | "name":"iOS", 2786 | "type":"/computer/operating_system" 2787 | }, 2788 | { 2789 | "/common/topic/alias":[], 2790 | "id":"/en/blackberry_os", 2791 | "name":"BlackBerry OS", 2792 | "type":"/computer/operating_system" 2793 | }, 2794 | { 2795 | "/common/topic/alias":[], 2796 | "id":"/en/linpus_linux", 2797 | "name":"Linpus Linux", 2798 | "type":"/computer/operating_system" 2799 | }, 2800 | { 2801 | "/common/topic/alias":[], 2802 | "id":"/en/ensemble", 2803 | "name":"Ensemble", 2804 | "type":"/computer/operating_system" 2805 | }, 2806 | { 2807 | "/common/topic/alias":[], 2808 | "id":"/en/sharpos", 2809 | "name":"SharpOS", 2810 | "type":"/computer/operating_system" 2811 | }, 2812 | { 2813 | "/common/topic/alias":[], 2814 | "id":"/en/newdos_80", 2815 | "name":"NewDos/80", 2816 | "type":"/computer/operating_system" 2817 | }, 2818 | { 2819 | "/common/topic/alias":[], 2820 | "id":"/en/ubuntu_jeos", 2821 | "name":"Ubuntu JeOS", 2822 | "type":"/computer/operating_system" 2823 | }, 2824 | { 2825 | "/common/topic/alias":[], 2826 | "id":"/en/moblin_project", 2827 | "name":"Moblin", 2828 | "type":"/computer/operating_system" 2829 | }, 2830 | { 2831 | "/common/topic/alias":[], 2832 | "id":"/en/bertos", 2833 | "name":"BeRTOS", 2834 | "type":"/computer/operating_system" 2835 | }, 2836 | { 2837 | "/common/topic/alias":[], 2838 | "id":"/en/windows_vista_enterprise", 2839 | "name":"Windows Vista Enterprise", 2840 | "type":"/computer/operating_system" 2841 | }, 2842 | { 2843 | "/common/topic/alias":[], 2844 | "id":"/m/046cmbj", 2845 | "name":"Chrysalis", 2846 | "type":"/computer/operating_system" 2847 | }, 2848 | { 2849 | "/common/topic/alias":[ 2850 | "Snow Leopard" 2851 | ], 2852 | "id":"/en/mac_os_x_v10_6", 2853 | "name":"Mac OS X Snow Leopard", 2854 | "type":"/computer/operating_system" 2855 | }, 2856 | { 2857 | "/common/topic/alias":[], 2858 | "id":"/en/ubuntu_netbook_remix", 2859 | "name":"Ubuntu Netbook Edition", 2860 | "type":"/computer/operating_system" 2861 | }, 2862 | { 2863 | "/common/topic/alias":[], 2864 | "id":"/en/berkeley_timesharing_system", 2865 | "name":"Berkeley Timesharing System", 2866 | "type":"/computer/operating_system" 2867 | }, 2868 | { 2869 | "/common/topic/alias":[], 2870 | "id":"/wikipedia/es_id/1825612", 2871 | "name":"Midori", 2872 | "type":"/computer/operating_system" 2873 | }, 2874 | { 2875 | "/common/topic/alias":[], 2876 | "id":"/en/dc_osx", 2877 | "name":"DC/OSx", 2878 | "type":"/computer/operating_system" 2879 | }, 2880 | { 2881 | "/common/topic/alias":[ 2882 | "Ubuntu Super Edition" 2883 | ], 2884 | "id":"/en/ubuntu_super_edition", 2885 | "name":"Super OS", 2886 | "type":"/computer/operating_system" 2887 | }, 2888 | { 2889 | "/common/topic/alias":[], 2890 | "id":"/en/windows_server_2000", 2891 | "name":"Windows Server 2000", 2892 | "type":"/computer/operating_system" 2893 | }, 2894 | { 2895 | "/common/topic/alias":[], 2896 | "id":"/m/04g1mvy", 2897 | "name":"Ultimate Edition", 2898 | "type":"/computer/operating_system" 2899 | }, 2900 | { 2901 | "/common/topic/alias":[], 2902 | "id":"/en/windows_server_2008_standard_edition", 2903 | "name":"Windows Server 2008 Standard Edition", 2904 | "type":"/computer/operating_system" 2905 | }, 2906 | { 2907 | "/common/topic/alias":[], 2908 | "id":"/en/windows_server_2008_enterprise_edition", 2909 | "name":"Windows Server 2008 Enterprise Edition", 2910 | "type":"/computer/operating_system" 2911 | }, 2912 | { 2913 | "/common/topic/alias":[], 2914 | "id":"/en/windows_server_2008_datacenter_edition", 2915 | "name":"Windows Server 2008 Datacenter Edition", 2916 | "type":"/computer/operating_system" 2917 | }, 2918 | { 2919 | "/common/topic/alias":[], 2920 | "id":"/en/windows_hpc_server_2008", 2921 | "name":"Windows HPC Server 2008", 2922 | "type":"/computer/operating_system" 2923 | }, 2924 | { 2925 | "/common/topic/alias":[], 2926 | "id":"/en/windows_web_server_2008", 2927 | "name":"Windows Web Server 2008", 2928 | "type":"/computer/operating_system" 2929 | }, 2930 | { 2931 | "/common/topic/alias":[], 2932 | "id":"/en/windows_storage_server_2008", 2933 | "name":"Windows Storage Server 2008", 2934 | "type":"/computer/operating_system" 2935 | }, 2936 | { 2937 | "/common/topic/alias":[], 2938 | "id":"/en/windows_small_business_server_2008", 2939 | "name":"Windows Small Business Server 2008", 2940 | "type":"/computer/operating_system" 2941 | }, 2942 | { 2943 | "/common/topic/alias":[ 2944 | "Windows Essential Business Server" 2945 | ], 2946 | "id":"/en/windows_essential_business_server_2008", 2947 | "name":"Windows Essential Business Server 2008", 2948 | "type":"/computer/operating_system" 2949 | }, 2950 | { 2951 | "/common/topic/alias":[], 2952 | "id":"/en/windows_server_2008_for_itanium_based_systems", 2953 | "name":"Windows Server 2008 for Itanium-based Systems", 2954 | "type":"/computer/operating_system" 2955 | }, 2956 | { 2957 | "/common/topic/alias":[], 2958 | "id":"/en/gp2x_wiz", 2959 | "name":"GP2X Wiz", 2960 | "type":"/computer/operating_system" 2961 | }, 2962 | { 2963 | "/common/topic/alias":[], 2964 | "id":"/en/futureos", 2965 | "name":"FutureOS", 2966 | "type":"/computer/operating_system" 2967 | }, 2968 | { 2969 | "/common/topic/alias":[ 2970 | "Ubuntu-Eee", 2971 | "Ubuntu Eee" 2972 | ], 2973 | "id":"/en/easy_peasy", 2974 | "name":"EasyPeasy", 2975 | "type":"/computer/operating_system" 2976 | }, 2977 | { 2978 | "/common/topic/alias":[], 2979 | "id":"/wikipedia/en_title/Robot_Operating_System", 2980 | "name":"Robot Operating System", 2981 | "type":"/computer/operating_system" 2982 | }, 2983 | { 2984 | "/common/topic/alias":[], 2985 | "id":"/en/amigaos_4", 2986 | "name":"AmigaOS 4", 2987 | "type":"/computer/operating_system" 2988 | }, 2989 | { 2990 | "/common/topic/alias":[ 2991 | "JUNOS" 2992 | ], 2993 | "id":"/en/junos", 2994 | "name":"Junos", 2995 | "type":"/computer/operating_system" 2996 | }, 2997 | { 2998 | "/common/topic/alias":[], 2999 | "id":"/m/04z_4t0", 3000 | "name":"Derrick", 3001 | "type":"/computer/operating_system" 3002 | }, 3003 | { 3004 | "/common/topic/alias":[ 3005 | "Kubuntu Hoary Hedgehog", 3006 | "Kubuntu Hoary" 3007 | ], 3008 | "id":"/en/kubuntu_5_04", 3009 | "name":"Kubuntu 5.04", 3010 | "type":"/computer/operating_system" 3011 | }, 3012 | { 3013 | "/common/topic/alias":[ 3014 | "Kubuntu Breezy Badger", 3015 | "Kubuntu Breezy" 3016 | ], 3017 | "id":"/en/kubuntu_5_10", 3018 | "name":"Kubuntu 5.10", 3019 | "type":"/computer/operating_system" 3020 | }, 3021 | { 3022 | "/common/topic/alias":[ 3023 | "Kubuntu Dapper", 3024 | "Kubuntu 6.06", 3025 | "Kubuntu Dapper Drake" 3026 | ], 3027 | "id":"/en/kubuntu_6_06_lts", 3028 | "name":"Kubuntu 6.06 LTS", 3029 | "type":"/computer/operating_system" 3030 | }, 3031 | { 3032 | "/common/topic/alias":[ 3033 | "Kubuntu Edgy", 3034 | "Kubuntu Edgy Eft" 3035 | ], 3036 | "id":"/en/kubuntu_6_10", 3037 | "name":"Kubuntu 6.10", 3038 | "type":"/computer/operating_system" 3039 | }, 3040 | { 3041 | "/common/topic/alias":[ 3042 | "Kubuntu Feisty Fawn", 3043 | "Kubuntu Feisty" 3044 | ], 3045 | "id":"/en/kubuntu_7_04", 3046 | "name":"Kubuntu 7.04", 3047 | "type":"/computer/operating_system" 3048 | }, 3049 | { 3050 | "/common/topic/alias":[ 3051 | "Kubuntu Gutsy Gibbon", 3052 | "Kubuntu Gutsy" 3053 | ], 3054 | "id":"/en/kubuntu_7_10", 3055 | "name":"Kubuntu 7.10", 3056 | "type":"/computer/operating_system" 3057 | }, 3058 | { 3059 | "/common/topic/alias":[ 3060 | "Kubuntu Hardy Heron", 3061 | "Kubuntu Hardy" 3062 | ], 3063 | "id":"/en/kubuntu_8_04", 3064 | "name":"Kubuntu 8.04", 3065 | "type":"/computer/operating_system" 3066 | }, 3067 | { 3068 | "/common/topic/alias":[ 3069 | "Kubuntu Intrepid Ibex", 3070 | "Kubuntu Intrepid" 3071 | ], 3072 | "id":"/en/kubuntu_8_10", 3073 | "name":"Kubuntu 8.10", 3074 | "type":"/computer/operating_system" 3075 | }, 3076 | { 3077 | "/common/topic/alias":[ 3078 | "Kubuntu Jaunty", 3079 | "Kubuntu Jaunty Jackalope" 3080 | ], 3081 | "id":"/en/kubuntu_9_04", 3082 | "name":"Kubuntu 9.04", 3083 | "type":"/computer/operating_system" 3084 | }, 3085 | { 3086 | "/common/topic/alias":[], 3087 | "id":"/en/vida_linux", 3088 | "name":"Vida Linux", 3089 | "type":"/computer/operating_system" 3090 | }, 3091 | { 3092 | "/common/topic/alias":[ 3093 | "GOS" 3094 | ], 3095 | "id":"/wikipedia/pt_id/2703915", 3096 | "name":"gOS", 3097 | "type":"/computer/operating_system" 3098 | }, 3099 | { 3100 | "/common/topic/alias":[], 3101 | "id":"/en/xandros_desktop", 3102 | "name":"Xandros Desktop", 3103 | "type":"/computer/operating_system" 3104 | }, 3105 | { 3106 | "/common/topic/alias":[], 3107 | "id":"/m/052ts63", 3108 | "name":"Absolute", 3109 | "type":"/computer/operating_system" 3110 | }, 3111 | { 3112 | "/common/topic/alias":[], 3113 | "id":"/wikipedia/en_title/Parted_Magic", 3114 | "name":"Parted Magic", 3115 | "type":"/computer/operating_system" 3116 | }, 3117 | { 3118 | "/common/topic/alias":[], 3119 | "id":"/en/linux_gamers", 3120 | "name":"linuX-gamers", 3121 | "type":"/computer/operating_system" 3122 | }, 3123 | { 3124 | "/common/topic/alias":[], 3125 | "id":"/en/whitix", 3126 | "name":"Whitix", 3127 | "type":"/computer/operating_system" 3128 | }, 3129 | { 3130 | "/common/topic/alias":[ 3131 | "Palm webOS", 3132 | "HP webOS" 3133 | ], 3134 | "id":"/en/palm_webos", 3135 | "name":"webOS", 3136 | "type":"/computer/operating_system" 3137 | }, 3138 | { 3139 | "/common/topic/alias":[], 3140 | "id":"/en/granular_linux", 3141 | "name":"Granular Linux", 3142 | "type":"/computer/operating_system" 3143 | }, 3144 | { 3145 | "/common/topic/alias":[], 3146 | "id":"/en/m_dos", 3147 | "name":"MIDAS", 3148 | "type":"/computer/operating_system" 3149 | }, 3150 | { 3151 | "/common/topic/alias":[], 3152 | "id":"/en/tinix", 3153 | "name":"Tinix", 3154 | "type":"/computer/operating_system" 3155 | }, 3156 | { 3157 | "/common/topic/alias":[], 3158 | "id":"/en/jari_os", 3159 | "name":"Jari OS", 3160 | "type":"/computer/operating_system" 3161 | }, 3162 | { 3163 | "/common/topic/alias":[], 3164 | "id":"/m/05k5q8q", 3165 | "name":"Finder", 3166 | "type":"/computer/operating_system" 3167 | }, 3168 | { 3169 | "/common/topic/alias":[], 3170 | "id":"/en/everest_linux", 3171 | "name":"EVEREST Linux", 3172 | "type":"/computer/operating_system" 3173 | }, 3174 | { 3175 | "/common/topic/alias":[ 3176 | "Buddhabuntu" 3177 | ], 3178 | "id":"/en/ubuntu_buddhist_remix", 3179 | "name":"Ubuntu Buddhist Remix", 3180 | "type":"/computer/operating_system" 3181 | }, 3182 | { 3183 | "/common/topic/alias":[], 3184 | "id":"/en/derrick_operating_system", 3185 | "name":"Derrick Operating System", 3186 | "type":"/computer/operating_system" 3187 | }, 3188 | { 3189 | "/common/topic/alias":[], 3190 | "id":"/en/windows_mobile_standard", 3191 | "name":"Windows Mobile Standard", 3192 | "type":"/computer/operating_system" 3193 | }, 3194 | { 3195 | "/common/topic/alias":[], 3196 | "id":"/en/sabily", 3197 | "name":"Sabily", 3198 | "type":"/computer/operating_system" 3199 | }, 3200 | { 3201 | "/common/topic/alias":[ 3202 | "Windows \"Vienna\"", 3203 | "Blackcomb", 3204 | "Vienna" 3205 | ], 3206 | "id":"/en/windows_vienna", 3207 | "name":"Windows 7", 3208 | "type":"/computer/operating_system" 3209 | }, 3210 | { 3211 | "/common/topic/alias":[ 3212 | "Mobile Internet Experience" 3213 | ], 3214 | "id":"/en/mie_linux", 3215 | "name":"MIE Linux", 3216 | "type":"/computer/operating_system" 3217 | }, 3218 | { 3219 | "/common/topic/alias":[], 3220 | "id":"/en/lubuntu", 3221 | "name":"Lubuntu", 3222 | "type":"/computer/operating_system" 3223 | }, 3224 | { 3225 | "/common/topic/alias":[], 3226 | "id":"/en/google_chrome_os", 3227 | "name":"Google Chrome OS", 3228 | "type":"/computer/operating_system" 3229 | }, 3230 | { 3231 | "/common/topic/alias":[], 3232 | "id":"/en/zorin_os", 3233 | "name":"Zorin OS", 3234 | "type":"/computer/operating_system" 3235 | }, 3236 | { 3237 | "/common/topic/alias":[ 3238 | "Central TRON" 3239 | ], 3240 | "id":"/en/ctron", 3241 | "name":"CTRON", 3242 | "type":"/computer/operating_system" 3243 | }, 3244 | { 3245 | "/common/topic/alias":[], 3246 | "id":"/m/075w9nv", 3247 | "name":"Ultimate", 3248 | "type":"/computer/operating_system" 3249 | }, 3250 | { 3251 | "/common/topic/alias":[ 3252 | "Karmic Koala" 3253 | ], 3254 | "id":"/en/ubuntu_9_10", 3255 | "name":"Ubuntu 9.10", 3256 | "type":"/computer/operating_system" 3257 | }, 3258 | { 3259 | "/common/topic/alias":[ 3260 | "Lucid Linkx", 3261 | "Lucid Lynx" 3262 | ], 3263 | "id":"/en/ubuntu_10_04", 3264 | "name":"Ubuntu 10.04", 3265 | "type":"/computer/operating_system" 3266 | }, 3267 | { 3268 | "/common/topic/alias":[ 3269 | "Windows Mobile 7", 3270 | "Windows Phone 7 Series", 3271 | "WP7", 3272 | "WP 7", 3273 | "WP" 3274 | ], 3275 | "id":"/en/windows_phone_7", 3276 | "name":"Windows Phone", 3277 | "type":"/computer/operating_system" 3278 | }, 3279 | { 3280 | "/common/topic/alias":[], 3281 | "id":"/en/ti89", 3282 | "name":"TI89", 3283 | "type":"/computer/operating_system" 3284 | }, 3285 | { 3286 | "/common/topic/alias":[], 3287 | "id":"/wikipedia/es_id/3632561", 3288 | "name":"MeeGo", 3289 | "type":"/computer/operating_system" 3290 | }, 3291 | { 3292 | "/common/topic/alias":[ 3293 | "Symbian platform", 3294 | "Symbian OS" 3295 | ], 3296 | "id":"/en/symbian_platform", 3297 | "name":"Symbian", 3298 | "type":"/computer/operating_system" 3299 | }, 3300 | { 3301 | "/common/topic/alias":[], 3302 | "id":"/m/0by064r", 3303 | "name":"Sirius RTOS", 3304 | "type":"/computer/operating_system" 3305 | }, 3306 | { 3307 | "/common/topic/alias":[], 3308 | "id":"/wikipedia/en_title/Funtoo_Linux", 3309 | "name":"Funtoo Linux", 3310 | "type":"/computer/operating_system" 3311 | }, 3312 | { 3313 | "/common/topic/alias":[], 3314 | "id":"/wikipedia/en_title/OpenIndiana", 3315 | "name":"OpenIndiana", 3316 | "type":"/computer/operating_system" 3317 | }, 3318 | { 3319 | "/common/topic/alias":[], 3320 | "id":"/wikipedia/en_title/Mageia", 3321 | "name":"Mageia", 3322 | "type":"/computer/operating_system" 3323 | }, 3324 | { 3325 | "/common/topic/alias":[], 3326 | "id":"/wikipedia/en_title/KDE_Software_Compilation", 3327 | "name":"KDE Software Compilation", 3328 | "type":"/computer/operating_system" 3329 | }, 3330 | { 3331 | "/common/topic/alias":[], 3332 | "id":"/wikipedia/en_title/BlackBerry_Tablet_OS", 3333 | "name":"BlackBerry Tablet OS", 3334 | "type":"/computer/operating_system" 3335 | }, 3336 | { 3337 | "/common/topic/alias":[], 3338 | "id":"/wikipedia/en_title/Mac_OS_X_Lion", 3339 | "name":"Mac OS X Lion", 3340 | "type":"/computer/operating_system" 3341 | }, 3342 | { 3343 | "/common/topic/alias":[ 3344 | "Chakra GNU/Linux" 3345 | ], 3346 | "id":"/wikipedia/es_id/4345491", 3347 | "name":"Chakra", 3348 | "type":"/computer/operating_system" 3349 | }, 3350 | { 3351 | "/common/topic/alias":[], 3352 | "id":"/wikipedia/en_title/CP-823$002FU", 3353 | "name":"CP-823/U", 3354 | "type":"/computer/operating_system" 3355 | }, 3356 | { 3357 | "/common/topic/alias":[ 3358 | "Android 3.0", 3359 | "Android 3.2", 3360 | "Android 3.1" 3361 | ], 3362 | "id":"/m/0g9gc37", 3363 | "name":"Honeycomb", 3364 | "type":"/computer/operating_system" 3365 | }, 3366 | { 3367 | "/common/topic/alias":[], 3368 | "id":"/m/0g9pn_f", 3369 | "name":"AD-75", 3370 | "type":"/computer/operating_system" 3371 | }, 3372 | { 3373 | "/common/topic/alias":[], 3374 | "id":"/m/0g9pn_j", 3375 | "name":"RBM-1", 3376 | "type":"/computer/operating_system" 3377 | }, 3378 | { 3379 | "/common/topic/alias":[], 3380 | "id":"/m/0g9pn_m", 3381 | "name":"CP-V", 3382 | "type":"/computer/operating_system" 3383 | }, 3384 | { 3385 | "/common/topic/alias":[], 3386 | "id":"/wikipedia/en_title/RT-Thread", 3387 | "name":"RT-Thread", 3388 | "type":"/computer/operating_system" 3389 | }, 3390 | { 3391 | "/common/topic/alias":[ 3392 | "Natty Narwhal" 3393 | ], 3394 | "id":"/m/0glhw5_", 3395 | "name":"Ubuntu 11.04", 3396 | "type":"/computer/operating_system" 3397 | }, 3398 | { 3399 | "/common/topic/alias":[], 3400 | "id":"/m/0gljrc7", 3401 | "name":"Kubuntu 11.04", 3402 | "type":"/computer/operating_system" 3403 | }, 3404 | { 3405 | "/common/topic/alias":[], 3406 | "id":"/m/0gljrcf", 3407 | "name":"Kubuntu 10.04", 3408 | "type":"/computer/operating_system" 3409 | }, 3410 | { 3411 | "/common/topic/alias":[], 3412 | "id":"/m/0gljrcm", 3413 | "name":"Kubuntu 10.10", 3414 | "type":"/computer/operating_system" 3415 | }, 3416 | { 3417 | "/common/topic/alias":[ 3418 | "Windows Phone 7.5", 3419 | "Windows Phone Mango" 3420 | ], 3421 | "id":"/m/0gtwkxh", 3422 | "name":"Windows Phone 7.1", 3423 | "type":"/computer/operating_system" 3424 | }, 3425 | { 3426 | "/common/topic/alias":[], 3427 | "id":"/wikipedia/tr/Windows_8", 3428 | "name":"Windows 8", 3429 | "type":"/computer/operating_system" 3430 | }, 3431 | { 3432 | "/common/topic/alias":[], 3433 | "id":"/wikipedia/en_title/VM$002F386", 3434 | "name":"VM/386", 3435 | "type":"/computer/operating_system" 3436 | }, 3437 | { 3438 | "/common/topic/alias":[ 3439 | "Protogon", 3440 | "ReFS", 3441 | "Windows Server 8" 3442 | ], 3443 | "id":"/wikipedia/en_title/Windows_Server_2012", 3444 | "name":"Windows Server 2012", 3445 | "type":"/computer/operating_system" 3446 | }, 3447 | { 3448 | "/common/topic/alias":[], 3449 | "id":"/wikipedia/en_title/Pinguy_OS", 3450 | "name":"Pinguy OS", 3451 | "type":"/computer/operating_system" 3452 | }, 3453 | { 3454 | "/common/topic/alias":[ 3455 | "Oneiric Ocelot" 3456 | ], 3457 | "id":"/m/0gwn877", 3458 | "name":"Ubuntu 11.10", 3459 | "type":"/computer/operating_system" 3460 | }, 3461 | { 3462 | "/common/topic/alias":[ 3463 | "Boot 2 Gecko", 3464 | "Boot to Gecko" 3465 | ], 3466 | "id":"/wikipedia/en_title/Firefox_OS", 3467 | "name":"Firefox OS", 3468 | "type":"/computer/operating_system" 3469 | }, 3470 | { 3471 | "/common/topic/alias":[], 3472 | "id":"/wikipedia/en_title/Z-DOS", 3473 | "name":"Z-DOS", 3474 | "type":"/computer/operating_system" 3475 | }, 3476 | { 3477 | "/common/topic/alias":[], 3478 | "id":"/wikipedia/en_title/ISIS_$0028operating_system$0029", 3479 | "name":"ISIS", 3480 | "type":"/computer/operating_system" 3481 | }, 3482 | { 3483 | "/common/topic/alias":[], 3484 | "id":"/wikipedia/en_title/Tizen", 3485 | "name":"Tizen", 3486 | "type":"/computer/operating_system" 3487 | }, 3488 | { 3489 | "/common/topic/alias":[ 3490 | "BBX" 3491 | ], 3492 | "id":"/wikipedia/en_title/BlackBerry_10", 3493 | "name":"BlackBerry 10", 3494 | "type":"/computer/operating_system" 3495 | }, 3496 | { 3497 | "/common/topic/alias":[ 3498 | "Motorola Ice Cream Sandwich", 3499 | "Android 4.0 Ice Cream Sandwich", 3500 | "ICS" 3501 | ], 3502 | "id":"/m/0hj1f77", 3503 | "name":"Ice Cream Sandwich", 3504 | "type":"/computer/operating_system" 3505 | }, 3506 | { 3507 | "/common/topic/alias":[], 3508 | "id":"/wikipedia/en_title/Ubuntu_TV", 3509 | "name":"Ubuntu TV", 3510 | "type":"/computer/operating_system" 3511 | }, 3512 | { 3513 | "/common/topic/alias":[], 3514 | "id":"/m/0h_jfj5", 3515 | "name":"SMSall", 3516 | "type":"/computer/operating_system" 3517 | }, 3518 | { 3519 | "/common/topic/alias":[], 3520 | "id":"/wikipedia/en_title/OS_X_Mountain_Lion", 3521 | "name":"OS X Mountain Lion", 3522 | "type":"/computer/operating_system" 3523 | }, 3524 | { 3525 | "/common/topic/alias":[ 3526 | "Windows 8 RT" 3527 | ], 3528 | "id":"/wikipedia/en_title/Windows_RT", 3529 | "name":"Windows RT", 3530 | "type":"/computer/operating_system" 3531 | }, 3532 | { 3533 | "/common/topic/alias":[], 3534 | "id":"/wikipedia/de_title/Microsoft_Windows_Phone_8", 3535 | "name":"Windows Phone 8", 3536 | "type":"/computer/operating_system" 3537 | }, 3538 | { 3539 | "/common/topic/alias":[ 3540 | "Jolla OS" 3541 | ], 3542 | "id":"/wikipedia/en_title/Sailfish_OS", 3543 | "name":"Sailfish OS", 3544 | "type":"/computer/operating_system" 3545 | }, 3546 | { 3547 | "/common/topic/alias":[], 3548 | "id":"/wikipedia/sv_id/1709546", 3549 | "name":"Yun OS", 3550 | "type":"/computer/operating_system" 3551 | }, 3552 | { 3553 | "/common/topic/alias":[ 3554 | "IOS 6" 3555 | ], 3556 | "id":"/wikipedia/en_title/IOS_6", 3557 | "name":"iOS 6", 3558 | "type":"/computer/operating_system" 3559 | }, 3560 | { 3561 | "/common/topic/alias":[ 3562 | "Android 4.1 Jelly Bean", 3563 | "Android 4.2 Jelly Bean", 3564 | "Android Jelly Bean" 3565 | ], 3566 | "id":"/dataworld/freeq/job_0bdfebe4-1991-4e0f-ac9a-aaf1faaad0c5_var_en_wikipedia_org_wiki_Android_Jelly_Bean", 3567 | "name":"Jelly Bean", 3568 | "type":"/computer/operating_system" 3569 | }, 3570 | { 3571 | "/common/topic/alias":[], 3572 | "id":"/m/0nd6nn1", 3573 | "name":"Key Lime Pie", 3574 | "type":"/computer/operating_system" 3575 | }, 3576 | { 3577 | "/common/topic/alias":[], 3578 | "id":"/wikipedia/en_title/Windows_Phone_7", 3579 | "name":"Windows Phone 7", 3580 | "type":"/computer/operating_system" 3581 | }, 3582 | { 3583 | "/common/topic/alias":[], 3584 | "id":"/wikipedia/en_title/Byzantium_$0028Linux_distribution$0029", 3585 | "name":"Byzantium", 3586 | "type":"/computer/operating_system" 3587 | }, 3588 | { 3589 | "/common/topic/alias":[ 3590 | "Ubuntu Phone" 3591 | ], 3592 | "id":"/wikipedia/fr/Ubuntu_pour_t$00E9l$00E9phones", 3593 | "name":"Ubuntu Touch", 3594 | "type":"/computer/operating_system" 3595 | }, 3596 | { 3597 | "/common/topic/alias":[], 3598 | "id":"/m/0pxm30z", 3599 | "name":"Windows 7 Professional,SP1, No Media, 64-bit, English", 3600 | "type":"/computer/operating_system" 3601 | }, 3602 | { 3603 | "/common/topic/alias":[], 3604 | "id":"/m/0pxm318", 3605 | "name":"Windows 7 Ultimate,SP1, No Media, 64-bit, English", 3606 | "type":"/computer/operating_system" 3607 | }, 3608 | { 3609 | "/common/topic/alias":[], 3610 | "id":"/m/0pxm31l", 3611 | "name":"Windows 7 Ultimate,SP1,w XP Mode, No Media, 64-bit, English", 3612 | "type":"/computer/operating_system" 3613 | }, 3614 | { 3615 | "/common/topic/alias":[], 3616 | "id":"/m/0pxm31x", 3617 | "name":"Windows 7 Professional,SP1,w XP Mode,No Media, 64-bit, English", 3618 | "type":"/computer/operating_system" 3619 | }, 3620 | { 3621 | "/common/topic/alias":[], 3622 | "id":"/m/0q2ttqf", 3623 | "name":"iOS 6.1", 3624 | "type":"/computer/operating_system" 3625 | }, 3626 | { 3627 | "/common/topic/alias":[], 3628 | "id":"/m/0q3y_ys", 3629 | "name":"PetrOS", 3630 | "type":"/computer/operating_system" 3631 | }, 3632 | { 3633 | "/common/topic/alias":[], 3634 | "id":"/m/0qz8mnb", 3635 | "name":"Linux Enterprise", 3636 | "type":"/computer/operating_system" 3637 | }, 3638 | { 3639 | "/common/topic/alias":[], 3640 | "id":"/wikipedia/en_title/Vino_$0028operating_system$0029", 3641 | "name":"Vino", 3642 | "type":"/computer/operating_system" 3643 | }, 3644 | { 3645 | "/common/topic/alias":[], 3646 | "id":"/wikipedia/en_title/Nokia_Asha_platform", 3647 | "name":"Nokia Asha platform", 3648 | "type":"/computer/operating_system" 3649 | }, 3650 | { 3651 | "/common/topic/alias":[ 3652 | "Aprendiendo de Jes\u00fas" 3653 | ], 3654 | "id":"/wikipedia/en_title/AdJ", 3655 | "name":"AdJ", 3656 | "type":"/computer/operating_system" 3657 | }, 3658 | { 3659 | "/common/topic/alias":[], 3660 | "id":"/wikipedia/en_title/IOS_7", 3661 | "name":"iOS 7", 3662 | "type":"/computer/operating_system" 3663 | }, 3664 | { 3665 | "/common/topic/alias":[], 3666 | "id":"/dataworld/freeq/job_dcd9f76a-37dd-4fea-839a-12667be6999b_var_en_wikipedia_org_wiki_AriOS_$0028operating_system$0029", 3667 | "name":"AriOS", 3668 | "type":"/computer/operating_system" 3669 | }, 3670 | { 3671 | "/common/topic/alias":[], 3672 | "id":"/dataworld/freeq/job_d93ac31a-6a7c-486e-8031-9d4d01eda818_var_en_wikipedia_org_wiki_SteamOS", 3673 | "name":"SteamOS", 3674 | "type":"/computer/operating_system" 3675 | }, 3676 | { 3677 | "/common/topic/alias":[], 3678 | "id":"/dataworld/freeq/job_b0d7a067-facc-4e55-b4dd-7b70bf896a60_var_en_wikipedia_org_wiki_Chitwanix_OS", 3679 | "name":"Chitwanix OS", 3680 | "type":"/computer/operating_system" 3681 | }, 3682 | { 3683 | "/common/topic/alias":[], 3684 | "id":"/dataworld/freeq/job_b0a54d8c-dd03-4d3b-b32d-112bad0f98b5_var_en_wikipedia_org_wiki_Windows_8_1", 3685 | "name":"Windows 8.1", 3686 | "type":"/computer/operating_system" 3687 | }, 3688 | { 3689 | "/common/topic/alias":[ 3690 | "Dell Solutions for Windows Migration and PC Deployment" 3691 | ], 3692 | "id":"/m/0zjl56b", 3693 | "name":"Windows 8-Dell Solutions for Windows Migration and PC Deployment", 3694 | "type":"/computer/operating_system" 3695 | }, 3696 | { 3697 | "/common/topic/alias":[], 3698 | "id":"/dataworld/freeq/job_0639d072-afff-4aa5-9efd-7f111e4f4ea1_var_en_wikipedia_org_wiki_Tuk", 3699 | "name":"Tuk", 3700 | "type":"/computer/operating_system" 3701 | }, 3702 | { 3703 | "/common/topic/alias":[], 3704 | "id":"/dataworld/freeq/job_7fd43a7b-9c7c-4e74-b2fc-d907ccbd7435_var_en_wikipedia_org_wiki_Meltemi_$0028operating_system$0029", 3705 | "name":"Meltemi", 3706 | "type":"/computer/operating_system" 3707 | }, 3708 | { 3709 | "/common/topic/alias":[], 3710 | "id":"/m/0_vxlwy", 3711 | "name":"iPhone OS", 3712 | "type":"/computer/operating_system" 3713 | }, 3714 | { 3715 | "/common/topic/alias":[], 3716 | "id":"/en/cubuntu", 3717 | "name":"Cubuntu", 3718 | "type":"/computer/operating_system" 3719 | }, 3720 | { 3721 | "/common/topic/alias":[ 3722 | "Trusty Tahr", 3723 | "Ubuntu 14.04" 3724 | ], 3725 | "id":"/m/0109jz3d", 3726 | "name":"Ubuntu 14.04 LTS", 3727 | "type":"/computer/operating_system" 3728 | }, 3729 | { 3730 | "/common/topic/alias":[ 3731 | "iOS 8" 3732 | ], 3733 | "id":"/dataworld/freeq/job_801a7f7c-419a-49c8-8ef2-661da18ce98a_var_en_wikipedia_org_wiki_IOS_8", 3734 | "name":"iOS 8", 3735 | "type":"/computer/operating_system" 3736 | }, 3737 | { 3738 | "/common/topic/alias":[], 3739 | "id":"/dataworld/freeq/job_801a7f7c-419a-49c8-8ef2-661da18ce98a_var_en_wikipedia_org_wiki_Synaptop", 3740 | "name":"Synaptop", 3741 | "type":"/computer/operating_system" 3742 | }, 3743 | { 3744 | "/common/topic/alias":[], 3745 | "id":"/dataworld/freeq/job_7c0715be-1724-41bf-98de-b71e36cc3777_var_en_wikipedia_org_wiki_OS_X_10_10", 3746 | "name":"OS X Yosemite", 3747 | "type":"/computer/operating_system" 3748 | }, 3749 | { 3750 | "/common/topic/alias":[], 3751 | "id":"/dataworld/freeq/job_4ea5aeaf-1152-42ce-a752-e56f76310da0_var_en_wikipedia_org_wiki_Android_L", 3752 | "name":"Android L", 3753 | "type":"/computer/operating_system" 3754 | }, 3755 | { 3756 | "/common/topic/alias":[], 3757 | "id":"/m/01146mng", 3758 | "name":"Firefox OS V1.1", 3759 | "type":"/computer/operating_system" 3760 | } 3761 | ] 3762 | } --------------------------------------------------------------------------------