Удалить unicode ‹+f0b7› из текста корпуса

У меня довольно упорная проблема... Я не могу удалить строки <+f0b7> и <+f0a0> из Corpora, которые были загружены из файлов *.txt в R:

ОБНОВЛЕНИЕ Вот ссылка на образец файла .txt: https://db.tt/qTRKpJYK

Corpus(DirSource("./SomeDirectory/txt/"), readerControl = list(reader = readPlain))

title
 professional staff - contract - permanent position
software c microfocus cobol unix btrieve ibm vm-cms vsam cics jcl
accomplishments
 <+f0b7>
<+f0a0>
responsible maintaining billing system interfaced cellular switching system <+f0b7>
<+f0a0>
developed unix interface ibm mainframe ericsson motorola att cellular switches

Я пытался добавить его в:

badWords <- unique(c(stopwords("en"), 
          stopwords("SMART")[stopwords("SMART") != "c"],
          as.character(1970:2050),
          "<U+F0B7>", "<+f0b7>",
          "<U+F0A0>", "<+f0a0>",
          "january",  "jan",
          "february",   "feb",
          "march",  "mar",
          "april",  "apr",
          "may",    "may",
          "june",   "jun",
          "july",   "jul",
          "august", "aug",
          "september",  "sep",
          "october",    "oct",
          "november",   "nov",
          "december",   "dec"))

И используя:

tm_map(candidates.Corpus, removeWords, badWords)

Но это как-то не работает. Я также пытался использовать регулярное выражение с чем-то вроде gsub("<+f0a0>", "", tmp, perl = FALSE), и это работает со строкой в ​​R, но каким-то образом эти символы все еще отображаются, когда я читаю файл .txt.

Есть ли что-то уникальное в этих персонажах? Как мне избавиться от них?


r tm
person Ray    schedule 10.06.2014    source источник
comment
Итак, вы говорите, что в вашем тексте появляется строка "<U+F0B7>", или вы говорите, что в вашем тексте появляется символ Юникода <U+F0B7>? Выводит ли R это значение на экран?   -  person MrFlick    schedule 10.06.2014
comment
Когда я inspect() элемент Корпуса, R фактически выводит это значение на мой экран.   -  person Ray    schedule 11.06.2014
comment
Пожалуйста, предоставьте данные для воспроизведения этой ошибки.   -  person Tyler Rinker    schedule 11.06.2014
comment
Приносим извинения за задержку, вот ссылка на образец файла .txt: db.tt/qTRKpJYK   -  person Ray    schedule 11.06.2014


Ответы (1)


Ok. Проблема в том, что в ваших данных есть необычный символ Юникода. В R мы обычно экранируем этот символ как "". Но когда inspect() печатает свои данные, они кодируются как "". Наблюдать

sample<-c("Crazy \uf0b7 Character")
cp<-Corpus(VectorSource(sample))
inspect(DocumentTermMatrix(cp))

# A document-term matrix (1 documents, 3 terms)
# 
# Non-/sparse entries: 3/0
# Sparsity           : 0%
# Maximal term length: 9 
# Weighting          : term frequency (tf)
# 
#     Terms
# Docs <U+F0B7> character crazy
#    1        1         1     1

(на самом деле мне пришлось создать этот вывод на компьютере с Windows под управлением R 3.0.2 - он отлично работал на моем Mac под управлением R 3.1.0).

К сожалению, вы не сможете удалить это с помощью удаления слов, потому что регулярное выражение, используемое в этой функции, требует, чтобы границы слов отображались с обеих сторон «слова», и поскольку это не похоже на распознанный символ для границы. Видеть

gsub("\uf0b7","",sample)
# [1] "Crazy  Character"
gsub("\\b\uf0b7\\b","",sample)
#[1] "Crazy  Character"

Итак, мы можем написать нашу собственную функцию, которую мы можем использовать с tm_map. Рассмотреть возможность

removeCharacters <-function (x, characters)  {
gsub(sprintf("(*UCP)(%s)", paste(characters, collapse = "|")), "", x, perl = TRUE)
}

что в основном является функцией removeWords только без граничных условий. Тогда мы можем запустить

cp2 <- tm_map(cp, removeCharacters, c("\uf0b7","\uf0a0"))
inspect(DocumentTermMatrix(cp2))

# A document-term matrix (1 documents, 2 terms)
# 
# Non-/sparse entries: 2/0
# Sparsity           : 0%
# Maximal term length: 9 
# Weighting          : term frequency (tf)
# 
#     Terms
# Docs character crazy
#    1         1     1

и мы видим, что этих символов Юникода больше нет.

person MrFlick    schedule 11.06.2014
comment
Мужик, ты меня спас. У меня была проблема с U+2007. Забавно, почему U+2007 известен как "цифровое пространство" (fileformat.info /info/unicode/char/2007/index.htm) не работает с чем-то вроде gsub("\\s+", "", x)? Может быть, пробел != пробел. Любые другие трюки с gsub не сработали, но ваша функция сделала это. Спасибо! - person Peter.k; 25.03.2017