ruby Количество слов в Rails?



word-count (5)

Ответы здесь имеют несколько вопросов:

  1. Они не учитывают символы utf и unicode (диакритические знаки): и т. Д.
  2. Они не учитывают апострофы и дефисы. Таким образом, Joe's будет считаться двумя словами Joe и это, очевидно, неправильно. Как и twenty-two , это одно сложное слово.

Нечто подобное работает лучше и объясняет эти проблемы:

foo.scan(/[\p{Alpha}\-']+/)

Возможно, вы захотите взглянуть на мой драгоценный камень Слова . Это позволяет считать слова, их вхождения, длины и пару других вещей. Это также очень хорошо задокументировано.

counter = WordsCounted::Counter.new(post.body)
counter.word_count #=> 3
counter.most_occuring_words #=> [["lorem", 3]]
# This also takes into capitalisation into account.
# So `Hello` and `hello` are counted as the same word.

Скажем, у меня есть модель блога с названием и телом. Как мне показать количество слов в теле и символов в заголовке? Я хочу, чтобы результат был примерно таким

Название: Lorem Тело: Lorem Lorem Lorem

Этот пост имеет количество слов 3.


Answer #1
"Lorem Lorem Lorem".scan(/\w+/).size
=> 3

ОБНОВЛЕНИЕ : если вам нужно сопоставить рок-н-ролл как одно слово, вы можете сделать как

"Lorem Lorem Lorem rock-and-roll".scan(/[\w-]+/).size
=> 4

Answer #2

Также:

"Lorem Lorem Lorem".split.size
=> 3

Answer #3
"caçapão adipisicing elit".scan(/[\w-]+/).size 
=> 5

Но, как мы видим, в предложении всего 3 слова. Проблема связана с акцентированными символами, потому что регулярное выражение \ w не рассматривает их как символ слова [A-Za-z0-9_].

Улучшенное решение будет

I18n.transliterate("caçapão adipisicing elit").scan(/[\w-]+/).size
=> 3

Answer #4
"Lorem Lorem Lorem".scan(/\S+/).size
=> 3




word-count