How to systematically classify Mathematica expressions? I can think of using Head[], Depth[], Length[], and some special pattern based on the problems at hand. What other key words, or functions should I consider?

Update

I mostly want to group symbols by how nested its list are, and what kinds of elements the lists have. For example

This one seems too broad ... to classify for what?
–
belisariusJan 17 '13 at 22:51

For example: Is this useul to you? Tally[Length /@ Characters@Names[]]
–
belisariusJan 17 '13 at 22:55

It sounds as though the questioner wants to define the set of features which can be used to uniquely resolve Mathematica expressions into a set of classes. A definition of the set of classes would be helpful.
–
image_doctorJan 17 '13 at 23:59

Did you considered looking at the book from S. Wolfram a new kind of science. There he discuses some main principals and rules applied to mathematica in particular Chapter 11: The Notion of Computation and further chapters.

Well, Depth only gives the maximum depth, so it's not indicative of the structure of the expression. For instance, Depth@{{_Integer}, {_String}} is also 4, but it's different from the second example above. For deeper depths, there will be several possible combinations of nestings that will give the same value
–
The Toad♦Jan 18 '13 at 19:10

Yes absolutely true, in as much as it correctly classifies the three examples given it accurately separates the example data. Adding the set of contained heads, or a positionally ordered list of heads , would lead to a more refined classification. Or adding something like Belisarius suggests, a hash based on name length would also be an improvement. But to know which would suit best would probably require a more refined question.
–
image_doctorJan 18 '13 at 20:35

Mathematica is a registered trademark of Wolfram Research, Inc. While the mark is used herein with the limited permission of Wolfram Research, Stack Exchange and this site disclaim all affiliation therewith.