টার্ম ফ্রিকোয়েন্সি / বিপরীত নথির ফ্রিকোয়েন্সি (টিএফ / আইডিএফ): ওজন


12

আমার কাছে একটি ডেটাসেট রয়েছে যা 1000 টি নথি এবং এতে উপস্থিত সমস্ত শব্দকে উপস্থাপন করে। সুতরাং সারিগুলি নথির প্রতিনিধিত্ব করে এবং কলামগুলি শব্দের প্রতিনিধিত্ব করে। সুতরাং উদাহরণস্বরূপ, কক্ষে মান বার শব্দ ঘোরা নথিতে দেখা দেয় । এখন, tf / idf পদ্ধতি ব্যবহার করে শব্দের 'ওজন' খুঁজে বের করতে হবে, তবে কীভাবে এটি করতে হয় তা আমি আসলে জানি না। কেউ কি দয়া করে আমাকে সাহায্য করতে পারেন?(আমি,)আমি


কী-ওয়ার্ড এক্সট্রাকশনের জন্য টিএফ-আইডিএফ-পরিসংখ্যান - joyofdata.de/blog/tf-idf-statistic-keyword-extration
রাফেল 16

উত্তর:


12

সূত্র সহ সম্পূর্ণ উইকিপিডিয়ায় এই বিষয়ে একটি ভাল নিবন্ধ রয়েছে । আপনার ম্যাট্রিক্সের মানগুলি ফ্রিকোয়েন্সি শব্দটি। আপনাকে কেবল আইডিএফ: (log((total documents)/(number of docs with the term))এবং 2 টি মানকে একাধিক সন্ধান করতে হবে।

আর তে, আপনি নীচের মতো এটি করতে পারলেন:

set.seed(42)
d <- data.frame(w=sample(LETTERS, 50, replace=TRUE))
d <- model.matrix(~0+w, data=d)

tf <- d
idf <- log(nrow(d)/colSums(d))
tfidf <- d

for(word in names(idf)){
  tfidf[,word] <- tf[,word] * idf[word]
}

এখানে ডেটাসেটস:

> colSums(d)
wA wC wD wF wG wH wJ wK wL wM wN wO wP wQ wR wS wT wV wX wY wZ 
 3  1  3  1  1  1  1  2  4  2  2  1  1  3  2  2  2  4  5  5  4 
> head(d)
  wA wC wD wF wG wH wJ wK wL wM wN wO wP wQ wR wS wT wV wX wY wZ
1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0
2  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0
3  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
4  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0
5  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0
6  0  0  0  0  0  0  0  0  0  0  1  0  0  0  0  0  0  0  0  0  0
> head(round(tfidf, 2))
  wA wC wD wF wG   wH wJ wK wL wM   wN wO wP   wQ wR wS wT   wV  wX  wY wZ
1  0  0  0  0  0 0.00  0  0  0  0 0.00  0  0 0.00  0  0  0 0.00 2.3 0.0  0
2  0  0  0  0  0 0.00  0  0  0  0 0.00  0  0 0.00  0  0  0 0.00 0.0 2.3  0
3  0  0  0  0  0 3.91  0  0  0  0 0.00  0  0 0.00  0  0  0 0.00 0.0 0.0  0
4  0  0  0  0  0 0.00  0  0  0  0 0.00  0  0 0.00  0  0  0 2.53 0.0 0.0  0
5  0  0  0  0  0 0.00  0  0  0  0 0.00  0  0 2.81  0  0  0 0.00 0.0 0.0  0
6  0  0  0  0  0 0.00  0  0  0  0 3.22  0  0 0.00  0  0  0 0.00 0.0 0.0  0

আপনি প্রতিটি শব্দটির আইডিএফটিও দেখতে পারেন:

> log(nrow(d)/colSums(d))
      wA       wC       wD       wF       wG       wH       wJ       wK       wL       wM       wN       wO       wP       wQ       wR       wS       wT       wV       wX       wY       wZ 
2.813411 3.912023 2.813411 3.912023 3.912023 3.912023 3.912023 3.218876 2.525729 3.218876 3.218876 3.912023 3.912023 2.813411 3.218876 3.218876 3.218876 2.525729 2.302585 2.302585 2.525729 

আপনার সাহায্যের জন্য ধন্যবাদ! তবে প্রতিটি শব্দের জন্য কিছু মান পাওয়া সম্ভব যা কিছু ওজনকে উপস্থাপন করে (পুরো ম্যাট্রিক্সের পরিবর্তে)? এখন আমাদের ওজনের একটি সম্পূর্ণ ম্যাট্রিক্স রয়েছে। আমি কিছু বৈশিষ্ট্য নির্বাচন করছি এবং ফিল্টার পদ্ধতি হিসাবে tf / idf ব্যবহার করতে চাই ...
এবিসি

সংজ্ঞা অনুসারে @ এ বি সি টিএফ-আইডিএফ বোঝায় ওজনের পূর্ণ ম্যাট্রিক্স। সম্ভবত আপনি একা আইডিএফ ওজনে আগ্রহী, যা আপনি পেয়ে যাবেন log((number of docs)/(number of docs containing the term))। আপনি কেবল বিরল পদগুলিও ফিল্টার করতে পারেন।
Zach

খুব পরিস্কার! সত্যিই প্রশংসা.
এবিসি

13

এখানে প্যাকেজ টিএম রয়েছে (পাঠ্য মাইনিং) http://cran.r-project.org/web/packages/tm/index.html যা আপনার ঠিক যেমনটি করা উচিত তা করা উচিত:

#read 1000 txt articles from directory data/txt
corpus  <-Corpus(DirSource("data/txt"), readerControl = list(blank.lines.skip=TRUE));
#some preprocessing
corpus <- tm_map(corpus, removeWords, stopwords("english"))
corpus <- tm_map(corpus, stripWhitespace)
corpus <- tm_map(corpus, stemDocument, language="english")
#creating term matrix with TF-IDF weighting
terms <-DocumentTermMatrix(corpus,control = list(weighting = function(x) weightTfIdf(x, normalize = FALSE)))

#or compute cosine distance among documents
dissimilarity(tdm, method = "cosine")

আর একটি কার্যকরী ভাষা তাই পাঠের কোডটি জটিল হতে পারে (উদাহরণস্বরূপ x পদে)


2

আপনার কোডটিতে একটি ত্রুটি রয়েছে: কলসুম শব্দের সাথে পাঠ্যের সংখ্যা নয়, কর্পাসে উপস্থিতির সংখ্যা গণনা করে।

যেমন একটি সংস্করণ গণনা করা হবে:

tfidf=function(mat){
  tf <- mat
  id=function(col){sum(!col==0)}
  idf <- log(nrow(mat)/apply(mat, 2, id))
  tfidf <- mat
  for(word in names(idf)){tfidf[,word] <- tf[,word] * idf[word]}
  return(tfidf)
  }

1

একটি নতুন আর প্যাকেজ রয়েছে যা এটি করতে পারে: টেক্সটায়ার: পাঠ্য বিশ্লেষণের জন্য বিপরীতমুখী রিগ্রেশন

সম্পর্কিত কমান্ডটি হ'ল tfidfম্যানুয়াল থেকে উদাহরণ:

data(we8there)
## 20 high-variance tf-idf terms
colnames(we8thereCounts)[
order(-sdev(tfidf(we8thereCounts)))[1:20]]

1

আমি এই পার্টিতে দেরি করেছি, তবে আমি টিসি-আইডিএফ ধারণার সাথে খেলছিলাম (আমি 'ধারণা' শব্দের উপর জোর দিতে চাই কারণ প্রকৃত গণনার জন্য আমি কোনও বই অনুসরণ করি নি; তাই এগুলি কিছুটা বন্ধ হয়ে থাকতে পারে এবং অবশ্যই আরও সহজেই যেমন প্যাকেজগুলি {tm: Text Mining Package}যেমন উল্লেখ করা হয়েছে) দিয়ে চালানো হয়েছে এবং আমি মনে করি যে আমি যা পেয়েছি তা এই প্রশ্নের সাথে সম্পর্কিত হতে পারে বা কোনও ঘটনায় এটি পোস্ট করার জন্য এটি ভাল জায়গা হতে পারে।


সেট-আপ: আমি একটি আছে কর্পাস এর 5দীর্ঘ মুদ্রিত মিডিয়া, থেকে নেওয়া অনুচ্ছেদ text 1মাধ্যমে 5যেমন নিউ ইয়র্ক টাইমস । কথিত, এটি খুব ছোট একটি "দেহ", একটি ক্ষুদ্র গ্রন্থাগার, সুতরাং কথা বলার জন্য, তবে এই "ডিজিটাল" লাইব্রেরিতে এন্ট্রিগুলি এলোমেলো নয়: প্রথম এবং পঞ্চম এন্ট্রিগুলি ফুটবলের সাথে মোকাবেলা করে (বা 'সামাজিক ক্লাব' এর জন্য 'সকার') (?) এখানে প্রায়) এবং আরও বিশেষভাবে আজকের সেরা দল সম্পর্কে। সুতরাং, উদাহরণস্বরূপ, text 1হিসাবে শুরু হয় ...

"গত নয় বছরে মেসি এফসি বার্সেলোনাকে জাতীয় ও আন্তর্জাতিক খেতাব অর্জন করেছেন এবং এমনভাবে ব্যক্তিগত রেকর্ড ভেঙেছেন যা অন্যরকমভাবে মনে হচ্ছে ..."

খুব সুন্দর! অন্যদিকে আপনি অবশ্যই অবশ্যই তিনটি এন্ট্রির মধ্যবর্তী বিষয়গুলি এড়িয়ে যেতে চাইবেন। এখানে একটি উদাহরণ (text 2 ):

"টেক্সাসের কয়েক ঘন্টার ব্যবধানে, মিঃ রুবিও পরামর্শ দিয়েছিলেন যে মিঃ ট্রাম্প তার ট্রাউজারগুলিতে প্রস্রাব করেছিলেন এবং অবৈধ অভিবাসীদের তার অবিরত টুইটার বার্তাগুলি সরিয়ে দেওয়ার জন্য ..."

তাই কি সব খরচ থেকে "সার্ফিং" এ এড়াতে করতে text 1করতে text 2, যখন অব্যাহত মধ্যে সর্বশক্তিমান বার্সেলোনা এফসি সম্পর্কে সাহিত্যে আনন্দের text 5?


টিসি-আইডিএফ: আমি প্রত্যেকটি শব্দকে textদীর্ঘ ভেক্টরগুলিতে বিচ্ছিন্ন করে দিয়েছি । তারপরে প্রতিটি শব্দের ফ্রিকোয়েন্সি গণনা করে, পাঁচটি ভেক্টর তৈরি করে (প্রত্যেকটির জন্য একটি text) যার সাথে কেবলমাত্র সংশ্লিষ্ট বর্ণিত শব্দগুলি textগণনা করা হত - অন্য সমস্ত শব্দগুলির সাথে সম্পর্কিত সমস্ত শব্দগুলি textশূন্যের মূল্যবান হয়। প্রথম স্নিপেটেtext 1উদাহরণস্বরূপ, , এর ভেক্টরটির "মেসি" শব্দের জন্য 1 গণনা থাকবে, যখন "ট্রাম্প" 0 থাকবে। এটি ছিল টিসি অংশ।

আইডিএফ অংশ প্রতিটি জন্য আলাদাভাবে হিসাব ছিল text, এবং 5 "ভেক্টর" ফলে (আমার ধারণা আমি তাদের ডেটা ফ্রেম হিসাবে গণ্য), শুধু শূন্য থেকে থেকে পাঁচ দস্তাবেজ (দুঃখিতভাবে এর গন্য এর লগারিদমিক রূপান্তরের সম্বলিত, আমাদের ছোট গ্রন্থাগার দেওয়া ) প্রদত্ত শব্দটি এতে রয়েছে যেমন:

লগ(নং দলিল1+ +নং দস্তাবেজগুলিতে একটি শব্দ রয়েছে)text01text

TC×IDFtext


COMPARISONS: এখন এই "শব্দটির গুরুত্বের ভেক্টর "গুলির মধ্যে ডট পণ্যগুলি সম্পাদন করার বিষয় ছিল।

স্বভাবিকভাবেই এই প্রভাবের এর ডট পণ্যের text 1সঙ্গে text 5ছিল 13.42645, যখন text 1বনাম। text2শুধুমাত্র ছিল 2.511799

ক্লানকি আর কোড (অনুকরণ করার মতো কিছুই) এখানে নেই

আবার এটি খুব প্রাথমিক সিমুলেশন, তবে আমি মনে করি এটি খুব গ্রাফিক।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.