This stuff is configurable in Postgres, but the French implementation in Postgres is the thing reducing this all the way down:
discourse_development=# select to_tsvector('french', 'passants');
to_tsvector
-------------
'pass':1
(1 row)
discourse_development=# select to_tsvector('english', 'passants');
to_tsvector
-------------
'passant':1
(1 row)
There are more fancy dictionaries that can be used, but they are extremely complicated to configure.