Patent ID: 8290975

Claim:
One or more computers comprising one or more processors and storage, the one or more computers comprising: keyword processing logic stored in the storage and executed by the one or more processors, the keyword processing logic building a graph data structure prior to query expansion performed by a reading a plurality of documents, the graph data structure comprising a cyclic graph, selecting all terms from portions of the documents after filtering out stop words, the terms comprising individual words or word phrases as found in text of the documents, and counting how many times each selected term is within a threshold distance of every other selected term in the plurality of documents, and for each of the pairs of terms in the selected terms that are within the threshold term distance of each other in any of the documents, setting association weights indicating numbers of times the terms of the respective pairs were determined to be within the threshold term distance of each other, and wherein terms in a document that have a distance therebetween beyond the threshold term distance are not counted, the keyword processing logic accessing a graph data structure built from output of the keyword processing logic, the graph data structure comprised of nodes and edges, with the nodes representative of only the selected terms that were determined to be within the threshold term distance of each other, each node of the graph data structure representing only a single corresponding term that is not represented by any other node of the graph data structure, and the edge between any two nodes having one of the association weights that corresponds to the terms of the two nodes, and storing the graph data structure in the storage of the one or more computers, wherein any two arbitrary terms in the graph data structure have only one edge therebetween, and the graph is cyclic, and the keyword processing logic receiving a query comprising a query term, looking up the query term in the graph data structure to find a node matching the query term, ranking a set of terms connected with the found node according to corresponding association weights, selecting a top-ranked subset of the ranked terms, and expanding the query with the subset of top-ranked terms before the query is passed to a search engine.