0

我正在测试text2vec。一个目录下只有 2 个文件(1.txt、2.txt,很小,每个大约 20 k)。我想测试它们的相似性。我不知道为什么它说 54 个文件。

> library(stringr)
>  library(NLP)
>  library(tm)
>  library(text2vec)


>  filedir="F:\\0 R\\similarity test\\corpus"
>  prep_fun = function(x) {
+     x %>% 
+     # make text lower case
+     str_to_lower %>% 
+     # remove non-alphanumeric symbols
+     str_replace_all("[^[:alnum:]]", " ") %>% 
+     # collapse multiple spaces
+     str_replace_all("\\s+", " ")
+  }
>  allfile=idir(filedir)
>  #files=list.files(path=filedir, full.names=T)
>  #allfile=ifiles(files)
>  it=itoken(allfile, preprocessor=prep_fun, progressbar=F)
>  stopwrd=stopwords("en")
>  v=create_vocabulary(it, stopwords=stopwrd)
> v
Number of docs: 54 
174 stopwords: i, me, my, myself, we, our ... 
ngram_min = 1; ngram_max = 1 
Vocabulary: 
          term term_count doc_count
  1:     house          2         2
  2: 224161072          2         2
  3:  suggests          2         2
  4:   remains          2         2
  5: published          2         2
 ---                               
338:      year         14         6
339:       nep         16        12
340:      will         16        10
341:   chinese         20        12
342:     malay         20        10
> 

我把数据导出成csv,发现新的文件名叫做:

1.txt_1
1.txt_2
1.txt_3
1.txt_4
...

...

如果我用

#files=list.files(path=filedir, full.names=T)
#allfile=ifiles(files)

它仍然显示 54 个文件

并且它们之间也存在相似性度量。大多数都是0相似度。

请让我知道是否应该是这种情况或任何情况。

我想要的只是 1.txt 和 2.txt 的一种相似性度量,并输出只包含这两个文件的度量的矩阵。

4

1 回答 1

3

text2vec 将每个文件中的每一行视为一个单独的文档。在您的情况下,我建议为readeridir/ifiles 函数提供另一个函数。读者应该只读取整个文件并将行折叠成一个字符串。(例如 reader = function (x) paste(readLines(x), collapse=' '))

于 2019-07-01T13:24:26.053 回答