এনএলপি এবং পাঠ্য বিশ্লেষণের সময়, ভবিষ্যদ্বাণীমূলক মডেলিংয়ের জন্য শব্দের একটি নথি থেকে বিভিন্ন ধরণের বৈশিষ্ট্য বের করা যেতে পারে। এর মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে।
ngrams
Words.txt থেকে শব্দের এলোমেলো নমুনা নিন । নমুনায় প্রতিটি শব্দের জন্য, প্রতিটি সম্ভাব্য দ্বি-গ্রাম অক্ষর বের করুন। উদাহরণ হিসেবে বলা যায়, শব্দ শক্তি {: এই দ্বি-গ্রাম নিয়ে গঠিত St , TR , পুনরায় , স্বীকারোক্তি , ng , GT , ম }। দ্বি-গ্রাম দ্বারা গ্রুপ করুন এবং আপনার কর্পাসে প্রতিটি দ্বি-গ্রাম এর ফ্রিকোয়েন্সি গণনা করুন। এখন ত্রি-গ্রামের জন্য একই জিনিসটি করুন, ... এন-গ্রাম পর্যন্ত সমস্ত উপায়। এই মুহুর্তে আপনার কাছে রোমান অক্ষরগুলি ইংরেজী শব্দ তৈরির জন্য কীভাবে একত্রিত হয় তার ফ্রিকোয়েন্সি বিতরণ সম্পর্কে মোটামুটি ধারণা রয়েছে।
ngram + শব্দের সীমানা
সঠিক বিশ্লেষণ করার জন্য আপনার শব্দের শুরু এবং শেষে এন-গ্রাম নির্দেশ করার জন্য ট্যাগগুলি তৈরি করা উচিত, ( কুকুর -> { ^ d , do , og , g ^ }) - এটি আপনাকে স্বাতন্ত্রিক / orthographic ক্যাপচার করতে দেয় যেসব প্রতিবন্ধকতাগুলি অন্যথায় মিস করা যেতে পারে (যেমন, স্থানীয় ইংরেজী শব্দের শুরুতে অনুক্রম এনজি কখনই ঘটতে পারে না, সুতরাং এই অনুক্রমটি ^ ng অনুমোদিত নয় - এনগুইনের মতো ভিয়েতনামী নাম ইংরেজি বক্তাদের পক্ষে উচ্চারণ করা শক্ত কারণগুলির মধ্যে একটি ) ।
এই সংগ্রহের গ্রামটিকে শব্দ_সেট বলুন । আপনি যদি ফ্রিকোয়েন্সি অনুসারে বাছাই করে থাকেন তবে আপনার সর্বাধিক ঘন গ্রামগুলি তালিকার শীর্ষে থাকবে - এগুলি ইংরেজী শব্দের মধ্যে সর্বাধিক সাধারণ ক্রমগুলি প্রতিফলিত করবে। নীচে আমি শব্দের থেকে চিঠিটি এনজিগ্রাম বের করার জন্য প্যাকেজ using ngram using ব্যবহার করে কিছু ( কুরুচিপূর্ণ ) কোড দেখাব তারপরে গ্রাম ফ্রিকোয়েন্সিগুলি গণনা করুন:
#' Return orthographic n-grams for word
#' @param w character vector of length 1
#' @param n integer type of n-gram
#' @return character vector
#'
getGrams <- function(w, n = 2) {
require(ngram)
(w <- gsub("(^[A-Za-z])", "^\\1", w))
(w <- gsub("([A-Za-z]$)", "\\1^", w))
# for ngram processing must add spaces between letters
(ww <- gsub("([A-Za-z^'])", "\\1 \\2", w))
w <- gsub("[ ]$", "", ww)
ng <- ngram(w, n = n)
grams <- get.ngrams(ng)
out_grams <- sapply(grams, function(gram){return(gsub(" ", "", gram))}) #remove spaces
return(out_grams)
}
words <- list("dog", "log", "bog", "frog")
res <- sapply(words, FUN = getGrams)
grams <- unlist(as.vector(res))
table(grams)
## ^b ^d ^f ^l bo do fr g^ lo og ro
## 1 1 1 1 1 1 1 4 1 4 1
আপনার প্রোগ্রামটি কেবল ইনপুট হিসাবে অক্ষরের আগত ক্রম গ্রহণ করবে, এটি পূর্বে আলোচিত হিসাবে গ্রামে বিভক্ত হবে এবং শীর্ষ গ্রামগুলির তালিকার সাথে তুলনা করবে। স্পষ্টতই আপনাকে প্রোগ্রামের আকারের উপযুক্ততার জন্য আপনার শীর্ষস্থানীয় পিকগুলি হ্রাস করতে হবে ।
ব্যঞ্জনা এবং স্বর
আর একটি সম্ভাব্য বৈশিষ্ট্য বা পদ্ধতি হ'ল ব্যঞ্জনবর্ণ স্বরক্রমগুলি দেখুন। মূলত সমস্ত শব্দকে ব্যঞ্জনবর্ণ স্বরযুক্ত স্ট্রিংগুলিতে রূপান্তর করুন (যেমন, প্যানকেক -> সিভিসিসিভিসিভি ) এবং পূর্বে আলোচিত একই কৌশল অনুসরণ করুন। এই প্রোগ্রামটি সম্ভবত অনেক ছোট হতে পারে তবে এটি নির্ভুলতায় ভোগে কারণ এটি ফোনগুলি উচ্চ-অর্ডার ইউনিটগুলিতে বিমূর্ত করে।
nchar
বৈধ ইংরেজি শব্দের সম্ভাবনা হ্রাসের সাথে অক্ষরের সংখ্যা বাড়ার সাথে সাথে আরেকটি দরকারী বৈশিষ্ট্যটি দৈর্ঘ্যের দৈর্ঘ্য হবে।
library(dplyr)
library(ggplot2)
file_name <- "words.txt"
df <- read.csv(file_name, header = FALSE, stringsAsFactors = FALSE)
names(df) <- c("word")
df$nchar <- sapply(df$word, nchar)
grouped <- dplyr::group_by(df, nchar)
res <- dplyr::summarize(grouped, count = n())
qplot(res$nchar, res$count, geom="path",
xlab = "Number of characters",
ylab = "Frequency",
main = "Distribution of English word lengths in words.txt",
col=I("red"))
ত্রুটি বিশ্লেষণ
এই ধরণের মেশিনের দ্বারা উত্পাদিত ত্রুটির ধরণের অর্থহীন শব্দগুলি হওয়া উচিত - যে শব্দগুলি দেখতে ইংরেজী শব্দ হওয়া উচিত তবে যা নয় (উদাহরণস্বরূপ, ghjrtg সঠিকভাবে প্রত্যাখ্যাত হবে (সত্য নেতিবাচক)) তবে বাকল ভুলভাবে একটি ইংরেজি শব্দ হিসাবে শ্রেণিবদ্ধ হবে (ইতিবাচক মিথ্যা)).
মজার বিষয় হচ্ছে, জাইজাইভাস ভুলভাবে প্রত্যাখ্যান করা হবে (মিথ্যা নেতিবাচক), কারণ জাইজাইভাস একটি প্রকৃত ইংরেজি শব্দ (কমপক্ষে word.txt অনুসারে ), তবে এর গ্রাম ক্রমগুলি অত্যন্ত বিরল এবং এর ফলে বৈষম্যমূলক শক্তির অবদানের সম্ভাবনা নেই।