знаки препинания хранятся в мешке слов?

Я создаю модуль мешка слов с нуля. Я не уверен, что в этом подходе лучше всего удалять знаки препинания. Рассмотрим предложение

I've been "DMX world center" for long time ago.Are u?

Вопрос. Что касается набора слов, следует ли мне рассмотреть

  • токен DMX (без кавычек) или "DMX (с левой кавычкой)
  • u (без знака вопроса) или u? (со знаком вопроса)

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

заранее спасибо

Обновлено. Это код того, что я реализовал.

Пример текста: ham , im .. On the snowboarding trip. I was wondering if your planning to get everyone together befor we go..a meet and greet kind of affair? Cheers,

   HashSet<String> bagOfWords = new HashSet<String>();
   BufferedReader reader = new BufferedReader(new FileReader(path));
   while (reader.ready()) {
       String msg = reader.readLine().split("\t", 2)[1].toLowerCase(); // I get only the 2nd part. 1st part indicate wether message is spam or ham
       String[] words = msg.split("[\\s+\n.\t!?+,]"); // this is the regex that I've used to split words
       for (String word : words) {
           bagOfWords.add(word);
       }
   }

person Thusitha Thilina Dayaratne    schedule 04.09.2013    source источник
comment
можешь написать, что ты пробовал?   -  person Woody    schedule 04.09.2013
comment
Привет, Вуди, я добавил фрагмент кода в обновленный раздел.   -  person Thusitha Thilina Dayaratne    schedule 04.09.2013
comment
попробуйте изменить индекс на 0, а не на 1. в String msg = reader.readLine().split(\t, 2)[0]   -  person Woody    schedule 04.09.2013
comment
Опубликуйте свой выходной формат. Это поможет нам решить проблему   -  person newuser    schedule 04.09.2013
comment
У меня нет определенного формата. Я хочу знать, как лучше всего рассматривать слова. Я имею в виду слова с двойными кавычками, вопросительными знаками, восклицательными знаками и т. д. (DMX, u? хорошо!) или слова без них (DMX, u, хорошо)   -  person Thusitha Thilina Dayaratne    schedule 04.09.2013
comment
@Thuiya, посмотри мой обновленный ответ.   -  person Woody    schedule 04.09.2013
comment
Спасибо @Вуди. Но я просто хочу знать, это способ разбиться на слова? Я имею в виду, я должен получить слова без знаков препинания или с ними?   -  person Thusitha Thilina Dayaratne    schedule 04.09.2013
comment
да, это так, а что касается знаков препинания, это зависит от ваших требований.   -  person Woody    schedule 04.09.2013
comment
Это во многом зависит от того, для чего вы хотите использовать слова после их токенизации. Если вы можете добавить эту информацию к вопросу, вы можете получить несколько полезных предложений.   -  person Dan Hulme    schedule 04.09.2013
comment
это интересный вопрос без слишком много информации там! если вы просто создаете модуль, то вам, вероятно, следует предоставить вызывающей стороне модуль решать, сохранять ли пунктуацию или нет с дополнительным аргументом. вы также можете посмотреть на функцию nltk tokenize() для чего-то похожего.   -  person arturomp    schedule 04.09.2013
comment
В прошлом обычной практикой было разделение знаков препинания на отдельные объекты. т.е. у вас было бы ‹I› ‹’› ‹ve› ‹been› ‹› ‹DMX› ‹World› ‹Center› ‹› ‹for› ‹long› ‹time› ‹назад› ‹.› ‹Are› ‹u› ‹ ?› или, может быть, идентифицируйте ‹DMX World Center› как единое целое, если можете, и существуют различные решения для сокращений, таких как ‹I’ve have›. Но это также сильно зависит от того, для чего вы собираетесь это использовать. Например, для байесовской классификации вы часто просто полностью отбрасываете знаки препинания.   -  person tripleee    schedule 06.09.2013
comment
Спасибо вам всем. Все ваши комментарии очень полезны   -  person Thusitha Thilina Dayaratne    schedule 09.09.2013


Ответы (1)


Попробуйте заменить код

 while (reader.ready()) {
       String msg = reader.readLine().split("\t", 2)[1].toLowerCase(); // I get only the 2nd part. 1st part indicate wether message is spam or ham
       String[] words = msg.split("[\\s+\n.\t!?+,]"); // this is the regex that I've used to split words
       for (String word : words) {
           bagOfWords.add(word.replaceAll("[!-+.^:,\"?]"," ").trim()); // it removes all sepecial characters what you mentioned
       }
   }
person Woody    schedule 04.09.2013
comment
На самом деле Вуди не виноват в этом разделе. Я хочу уточнить, следует ли мне рассматривать DMX world center как DMX, world, center или DMX, world, center (без кавычек). А также я должен опускать знаки препинания, такие как ?, ! и т.д... от слов и считать такие слова как ты?, лучший! как есть или без них? Благодарность - person Thusitha Thilina Dayaratne; 04.09.2013