text unique to the grain should be stored in fact table or dimension table?
Yes it does make sense to keep the text in the fact table for two reasons :

It is the same grain as the fact, so having a dimension just for that would indeed make it grow as fast as the fact table
It is not linked to other attributes in the fact table, so it can be modeled as a Degenerate Dimension directly in the fact table (even though it usually applies more to an ID or a label).

Text won't be part of your select statement when you aggregate reviews so it shouldn't impact performance. It will be there only when showing the data at the most granular level.
If you find out you have some other low-cardinality descriptive attributes that you can't easily put in an existing dimension because they are not linked to other attributes, you can also build a junk dimension with all these unrelated attributes.