I am tasked with implementing three different compression methods: arithmetic coding, PPM and LZW. I then have to compare their performance on different data (image, audio, text, binary executables).
This sounds like a CS homework problem.
* Arithmetic coding is important to do even today. It is usually considered a starting point, not an ending point.
* PPM is going to give you some interesting results for images. For grins and giggles, try that with an image from a new 50 megapixel digital camera.
* LZW is 35 years old, and was constrained by hardware of the era. It is useful to study since there are many compressors today based on Limpel & Ziv's work in the 1970s, generally with technical names starting LZxxxx. Be aware you are studying a historical version. It has a few properties that are fun to study, like the result of re-running the output through the compressor again. Repeat a few iterations, checking the result size until you've learned a few things.
how do I choose the appropriate symbol size? E.g., if the file is text, a single character could be 8 or 16 bit long and setting symbol size to 8 bits or 16 bits could have large impact on the compression ratio. Do I simply try various reasonable sizes (various multiples of one byte) and see which one fits the data best?
This is one of the better questions for you to answer, and a reason there are so many LZxxx algorithms.
There is no universal "best". Today there are algorithms with dynamic tables, algorithms that encode everything into Markov chains and then compress the statisically-chained data. There are also versions specifically designed for various types of data.
For your project, you might try both 8-bit and 16-bit and compare the results. If you happen to know more about the data file you might also try 32-bit and 64-bit, since some specific types of data files will be more friendly or less friendly to these.
Good luck on your comparison.