Frequently Asked Questions
Getting Started (3)
Help for new Cyc users
OpenCyc is the open source version of the Cyc technology, the world's largest and most complete general knowledge base and commonsense reasoning engine. OpenCyc contains the full set of (non-proprietary) Cyc terms as well as millions of assertions about the. Cycorp offers this ontology at no cost and encourages you to make use of it as you see fit.
People all over the world have been tracking the Cyc project since its inception. Many graduate students have done Cyc-based research and written dissertations on Cyc. Thus, you can find enthusiasts throughout academia. You'll find the most hard-core Cyclists, however, have downloaded OpenCyc and are working (instead of sleeping) to make their own Cyc-based applications. These people frequent the following address:
Cyc features and capabilties
Yes, it is compatible with apache but also has its own built-in http server (this is the default) -- it can use either.
Cyc has a full API for writing to the server-local file system. However, it is mostly designed for writing SubL objects. That said, strings are SubL objects, for example.
The following SubL fragment could be used to save a set of strings via the Java API.
Call #1: open the stream to a file in Cyc's installation directory, (i.e. cyc-sys10.133610-kb7148)
;; assign a global variable for a sample stream (csetq *sample-stream* (open-text "sample-file.text" :output)) ;; pass each string down as needed, where STRING is some string ;; TERPRI appends a newline character (progn (write-string STRING *sample-stream*) (terpri *sample-stream*)) ;; Alternatively, pass down groups of strings as a list (cdolist (string '("There was a king who ruled the land" "his majesty was in command" "flying flags from every steeple" "showering silver on the people." "--Pink Floyd, Piper at the Gates of Dawn")) (write-string string *sample-stream*) (terpri *sample-stream*)) ;; final Call close the stream (progn (close *sample-stream*) (csetq *sample-stream* NIL))
If you do have all the strings, then you can use the SubL macro facility to leave the stream a local variable and ensure that cleanup happens on error.
(with-private-text-file (stream "sample-file.text" :output) (cdolist (string '("There was a king who ruled the land" "his majesty was in command" "flying flags from every steeple" "showering silver on the people." "--Pink Floyd, Piper at the Gates of Dawn")) (write-string string stream) (terpri stream))
Finally, if you want to write the strings in chunks, you can use the :append flag instead of the :output flag to do the usual UN*X file appending instead of overwriting in the subsequent calls.
(cdolist (string '("There was a king who ruled the land" "his majesty was in command")) (with-private-text-file (stream "sample-string.text" :output) (write-string string stream) (terpri stream))) (cdolist (string '("flying flags from every steeple" "showering silver on the people." "--Pink Floyd, Piper at the Gates of Dawn")) (with-private-text-file (stream "sample-string.text" :append) (write-string string stream) (terpri stream)))
Content and structure of the Cyc knowledge base
OpenCyc can be used as the basis for a wide variety of intelligent applications such as
speech understanding (using the KB to prune implausible choices via common sense, discourse context, and prosodics)
database integration (using the KB as an interlingua through which semantic joins occur automatically via back chaining) and consistency-checking
rapid development of an ontology in a vertical area (by extending and growing the OpenCyc KB in that area, using the OpenCyc Rapid Theory Formation toolkit)
email prioritizing, routing, summarizing, and annotating
to name just a few. If you have ideas or suggestions, you can send them to us at email@example.com or discuss them on the OpenCyc discussion forum on SourceForge.
OpenCyc includes several open source programs along with the knowledge base and the knowledge server. These will tentatively include:
- An ontology exporter to selectively export OWL files
- Semantic Web Server supporting DAML queries (Java)
- Inference graphing program (Java)
- Java version of the Cyc API (Java)
As a rule of thumb, commonsense is the knowledge we all have but it not necessarily recorded in reference books explicitly. For example, it is somewhat difficult to find an encyclopedia or dictionary that says that when a bowl is inverted, its contents run out. In addition to the broadly applicable information that is found in reference books, Cyc has many hand entered facts required to understand the assumptions that underlie human discourse. Commonsense representation and reasoning in the Cyc Knowledge Base has the goal of avoiding the brittleness observed when scaling up typical expert systems to include more knowledge. Cyc is engineered to eventually have a suitable representation for the full range of human expression, so that expert knowledge bases can be created by extending from the Cyc upper and middle ontology. Our methodology assumes that representing new knowledge is much easier when a large body of general purpose knowledge is already present. Cyc uses inheritance hierarchies within its major object types (e.g. terms, relationships and contexts) to concisely represent knowledge.
Building applications using Cyc
The provided Cyc Server implementation has a socket-based API, which developers can use to create applications that access the knowledge base for browsing, editing, and inference purposes.
Other random FAQs
You can run multiple Cyc images on a single machine, assuming it has sufficient resources, by changing the base port for (at least) one of the images. For instance, you can have one Cyc image running on base port 3600 (the default) and another on port 3620. To access the first image, point your browser to YOURMACHINENAME::3602/cgi-bin/cg?cb-start; for the second, hit YOURMACHINENAME:3622/cgi-bin/cg?cb-start. The base port value (and the per-service offset values) are configured in the init/parameters.lisp file. For more configuration information, see Network Service Parameters.