Service Oriented Architecture (SOA) is an approach to build distributed systems that deliver application functionality as services that are language and platform-independent. Web service is one of the fundamental technologies in implementing SOA based applications. Web services are modular, self-describing, self-contained and loosely coupled applications that can be published, located, and invoked across the web. As the number of web services is increased, finding a set of suitable web service candidates with regard to a user’s requirement becomes a challenge. Web service discovery is the process of finding the most suitable service by matching service descriptions against service requests. Various approaches for web service discovery have been proposed. In this paper, we present an overview of different approaches for web service discovery described in the literature and try to classify them into different categories. We also determine the advantages and disadvantages of each category. The goal is to help researchers to propose a new approach or to select the most appropriate existing approach for service discovery.