অক্ষর ক্রমটি ইংরেজি শব্দ বা গোলমাল কিনা তা কীভাবে নির্ধারণ করবেন


11

ভবিষ্যতের ভবিষ্যদ্বাণী করার জন্য আপনি কী ধরণের বৈশিষ্ট্যগুলি শব্দের তালিকা থেকে নিষ্কাশনের চেষ্টা করবেন, এটি কি বিদ্যমান শব্দ বা কেবল অক্ষরের অগোছালো?

আমি সেখানে পাওয়া টাস্কের বিবরণ রয়েছে

আপনাকে এমন একটি প্রোগ্রাম লিখতে হবে যা প্রদত্ত শব্দটি ইংরেজি কিনা উত্তর দিতে পারে। এটি সহজ হবে - আপনাকে অভিধানে শব্দটি সন্ধান করতে হবে - তবে একটি গুরুত্বপূর্ণ বিধিনিষেধ রয়েছে: আপনার প্রোগ্রামটি 64৪ কিবি-র চেয়ে বড় হওয়া উচিত নয়।

সুতরাং, আমি ভেবেছিলাম সমস্যাটি সমাধানের জন্য লজিস্টিক রিগ্রেশন ব্যবহার করা সম্ভব হবে। ডেটা মাইনিং নিয়ে আমার অনেক অভিজ্ঞতা নেই তবে কাজটি আমার কাছে আকর্ষণীয়।

ধন্যবাদ।


চিঠিটি এন-গ্রাম।
এমেরে

একটি অভিধানে এটি তাকান? আপনি এখানে কী করার চেষ্টা করছেন, এটি পরিষ্কার নয়। উদাহরণ দাও.
স্পেসডম্যান 17

দুঃখিত, সম্ভবত আমি সমস্যাটি পুরোপুরি ব্যাখ্যা করিনি। আমি সেখানে পেয়েছি এমন কাজের বিবরণ রয়েছে আপনার একটি প্রোগ্রাম লিখতে হবে যা প্রদত্ত শব্দটি ইংরেজি কিনা উত্তর দিতে পারে। এটি সহজ হবে - অভিধানে আপনাকে কেবল শব্দটি সন্ধান করতে হবে - তবে একটি গুরুত্বপূর্ণ বিধিনিষেধ রয়েছে: আপনার প্রোগ্রামটি Ki৪ কিবি-র চেয়ে বড় হওয়া উচিত নয়। সুতরাং, আমি ভেবেছিলাম সমস্যাটি সমাধানের জন্য লজিস্টিক রিগ্রেশন ব্যবহার করা সম্ভব হবে। ডেটা মাইনিং নিয়ে আমার অনেক অভিজ্ঞতা নেই তবে কাজটি আমার কাছে আকর্ষণীয়।
ভিটালি মিশেঙ্কো

উত্তর:


13

এনএলপি এবং পাঠ্য বিশ্লেষণের সময়, ভবিষ্যদ্বাণীমূলক মডেলিংয়ের জন্য শব্দের একটি নথি থেকে বিভিন্ন ধরণের বৈশিষ্ট্য বের করা যেতে পারে। এর মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে।

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 অনুসারে ), তবে এর গ্রাম ক্রমগুলি অত্যন্ত বিরল এবং এর ফলে বৈষম্যমূলক শক্তির অবদানের সম্ভাবনা নেই।


1
fyi - words.txt থেকে নমুনার প্রয়োজন নেই, কেবলমাত্র পুরো তালিকাটি ব্যবহার করুন (আমি একটি সিপিএল বছর ধরে বড় ডেটা ল্যান্ডে আছি তাই আমার মুখের প্রথম শব্দগুলি সর্বদা "একটি এলোমেলো নমুনা নিতে" লোল)।
ব্র্যান্ডন লৌডারমিল্ক

আমি মনে করি এই প্রতিযোগিতার বিজয়ী সম্ভবত এনজিগ্রামের চেয়ে আরও কিছু অন্তর্দৃষ্টি যুক্ত করবে, যদিও এটি কৌশলটির অংশ হিসাবে তাদের ভালভাবে অন্তর্ভুক্ত করতে পারে। আমি মনে করি যে কেবলমাত্র এনজিগ্রাম ব্যবহার করা অনেকগুলি মিথ্যা ইতিবাচক দিকে পরিচালিত করবে, যেমন পরীক্ষার বিবরণে বোঝা যায় যে "বিশ্বাসযোগ্য" তবে অ-ইংরেজি শব্দগুলি পরীক্ষার সেটে রয়েছে।
নিল স্লেটার

আপনার ব্যঞ্জনবর্ণ এবং স্বরবর্ণের কৌশলটির একটি সাধারণীকরণ হ'ল স্কিপ-গ্রাম
এমেরে

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