{"id":1813,"date":"2025-08-27T01:04:10","date_gmt":"2025-08-27T01:04:10","guid":{"rendered":"https:\/\/poxiro.com\/?page_id=1813"},"modified":"2025-10-12T15:15:46","modified_gmt":"2025-10-12T15:15:46","slug":"text-summarizer","status":"publish","type":"page","link":"https:\/\/poxiro.com\/ar\/text-summarizer\/","title":{"rendered":"\u0645\u0644\u062e\u0635 \u0627\u0644\u0646\u0635"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\" dir=\"ltr\">\n<head>\n  <meta charset=\"utf-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n\n  <!-- SEO meta (edit to match your domain) -->\n  <title>Online Text Summarizer \u2014 Quick &#038; Accurate | Poxiro<\/title>\n  <meta name=\"description\" content=\"Free online text summarizer in English and Arabic. Choose summary length, view as bullets or paragraph, copy or download the result.\" \/>\n  <link rel=\"canonical\" href=\"https:\/\/yourdomain.com\/text-summarizer\" \/>\n  <meta property=\"og:title\" content=\"Online Text Summarizer \u2014 Quick &#038; Accurate\" \/>\n  <meta property=\"og:description\" content=\"Free online text summarizer in English and Arabic. Choose summary length, view as bullets or paragraph, copy or download the result.\" \/>\n  <meta property=\"og:type\" content=\"website\" \/>\n  <meta property=\"og:url\" content=\"https:\/\/yourdomain.com\/text-summarizer\" \/>\n\n  <style>\n    \/* --- Clean professional style (LTR) --- *\/\n    :root{\n      --card:#ffffff;\n      --bg:#f7f8fb;\n      --accent:#0b6efd;\n      --muted:#6b7280;\n      --radius:12px;\n    }\n    body{\n      font-family: system-ui, \"Inter\", Arial, sans-serif;\n      background:var(--bg);\n      color:#0f172a;\n      margin:0;\n      padding:28px;\n      -webkit-font-smoothing:antialiased;\n    }\n    .container{\n      max-width:980px;\n      margin:0 auto;\n      display:grid;\n      gap:18px;\n      grid-template-columns: 1fr;\n    }\n    .card{\n      background:var(--card);\n      padding:18px;\n      border-radius:var(--radius);\n      box-shadow:0 6px 20px rgba(2,6,23,0.06);\n    }\n\n    h1{font-size:20px;margin:0 0 8px}\n    p.lead{margin:0 0 12px;color:var(--muted)}\n\n    .flex{display:flex;gap:12px;align-items:center}\n    .flex.col{flex-direction:column}\n\n    textarea#inputText{\n      width:100%;\n      min-height:220px;\n      padding:12px;\n      border-radius:10px;\n      border:1px solid #e6e9ef;\n      font-size:15px;\n      resize:vertical;\n      direction:ltr;\n    }\n\n    .controls{display:flex;gap:10px;flex-wrap:wrap;align-items:center}\n    select,input[type=range]{padding:8px;border-radius:8px;border:1px solid #e6e9ef}\n    button{\n      background:var(--accent); color:#fff;border:none;padding:10px 14px;border-radius:10px;cursor:pointer;\n      box-shadow:0 6px 14px rgba(11,110,253,0.12);\n    }\n    button.ghost{background:transparent;color:var(--accent);border:1px solid var(--accent)}\n    .meta{font-size:13px;color:var(--muted);display:flex;gap:12px;flex-wrap:wrap}\n\n    .result{\n      white-space:pre-wrap;\n      line-height:1.6;\n      padding:12px;border-radius:10px;background:#fbfdff;border:1px solid #eef5ff;\n      min-height:140px;font-size:15px;\n    }\n\n    .row{display:flex;gap:12px;align-items:center}\n    .badge{background:#eef2ff;color:#0b4adf;padding:6px 8px;border-radius:999px;font-weight:600;font-size:13px}\n\n    .small{font-size:13px;color:var(--muted)}\n    .actions{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}\n    @media(max-width:720px){\n      .controls{flex-direction:column;align-items:flex-start}\n      .row{flex-direction:column;align-items:flex-start}\n    }\n  <\/style>\n<\/head>\n<body>\n\n  <main class=\"container\">\n\n    <section class=\"card\" id=\"summarizerCard\">\n      <h1>\ud83d\udcdd Text Summarizer<\/h1>\n      <p class=\"lead\">Paste a long text or load a .txt file. Choose the summary length, output style (paragraph or bullets), then click &#8220;Summarize&#8221;. Great for students, researchers, and content writers.<\/p>\n\n      <!-- input -->\n      <textarea id=\"inputText\" placeholder=\"Paste or type your long text here...\"><\/textarea>\n\n      <div style=\"height:8px\"><\/div>\n\n      <div class=\"controls\">\n        <div class=\"row\">\n          <label class=\"small\" for=\"sentencesCount\">Summary length (sentences):&nbsp;<\/label>\n          <select id=\"sentencesCount\">\n            <option value=\"2\">2 sentences<\/option>\n            <option value=\"3\" selected>3 sentences<\/option>\n            <option value=\"5\">5 sentences<\/option>\n            <option value=\"8\">8 sentences<\/option>\n            <option value=\"0\">Extract key points<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"row\">\n          <label class=\"small\">Output style:<\/label>\n          <select id=\"mode\">\n            <option value=\"paragraph\" selected>Paragraph<\/option>\n            <option value=\"bullet\">Bullets<\/option>\n          <\/select>\n        <\/div>\n\n        <div class=\"row\">\n          <label class=\"small\">Language:<\/label>\n          <select id=\"lang\">\n            <option value=\"auto\" selected>Auto detect<\/option>\n            <option value=\"en\">English<\/option>\n            <option value=\"ar\">Arabic<\/option>\n          <\/select>\n        <\/div>\n\n        <div style=\"margin-left:auto\" class=\"row\">\n          <button id=\"summarizeBtn\">Summarize<\/button>\n          <button id=\"clearBtn\" class=\"ghost\">Clear<\/button>\n        <\/div>\n      <\/div>\n\n      <div style=\"height:12px\"><\/div>\n\n      <div class=\"meta\">\n        <div class=\"small\">Words: <span id=\"wordCount\">0<\/span><\/div>\n        <div class=\"small\">Chars: <span id=\"charCount\">0<\/span><\/div>\n        <div class=\"small\">Reading time: <span id=\"readTime\">0<\/span> min<\/div>\n        <div class=\"small\">Sentences: <span id=\"sentCount\">0<\/span><\/div>\n      <\/div>\n\n      <div style=\"height:12px\"><\/div>\n\n      <h3 style=\"margin:6px 0\">\ud83d\udccc Summary:<\/h3>\n      <div id=\"summary\" class=\"result\">Place your text and click &#8220;Summarize&#8221;.<\/div>\n\n      <div class=\"actions\">\n        <button id=\"copyBtn\" class=\"ghost\">Copy summary<\/button>\n        <button id=\"downloadBtn\" class=\"ghost\">Download .txt<\/button>\n        <button id=\"shareBtn\" class=\"ghost\">Share (link)<\/button>\n        <button id=\"examplesBtn\" class=\"ghost\">Sample text<\/button>\n      <\/div>\n\n      <div style=\"height:8px\"><\/div>\n      <div class=\"small\">Note: This uses a local extractive algorithm (fast, runs in browser). For higher-quality abstractive summaries use a server-side AI model (OpenAI \/ HuggingFace).<\/div>\n    <\/section>\n\n\n  <\/main>\n\n  <script>\n    \/* -------------------------\n       JS: Simple extractive summarizer\n       Steps:\n       1. Split text into sentences and words\n       2. Remove stopwords and compute word frequency\n       3. Score each sentence by sum of important word frequencies\n       4. Return top N sentences (or bullets)\n       ------------------------- *\/\n\n    const STOPWORDS = {\n      ar: [\"\u0641\u064a\",\"\u0645\u0646\",\"\u0639\u0644\u0649\",\"\u0648\",\"\u0623\u0646\",\"\u0625\u0644\u0649\",\"\u0647\u0646\u0627\u0643\",\"\u0647\u0648\",\"\u0647\u064a\",\"\u0645\u0627\",\"\u0644\u0645\",\"\u0644\u0627\",\"\u0643\u0645\u0627\",\"\u0644\u062f\u0649\",\"\u0639\u0646\",\"\u0643\u0627\u0646\",\"\u0643\u0627\u0646\u062a\",\"\u0647\u0630\u0627\",\"\u0647\u0630\u0647\",\"\u062b\u0645\",\"\u0628\u064a\u0646\",\"\u0645\u0639\",\"\u0643\u0644\",\"\u0623\u0648\",\"\u0623\u064a\",\"\u062d\u062a\u0649\",\"\u0642\u062f\"],\n      en: [\"the\",\"and\",\"is\",\"in\",\"to\",\"of\",\"a\",\"that\",\"it\",\"for\",\"on\",\"with\",\"as\",\"are\",\"was\",\"be\",\"by\",\"an\",\"or\",\"from\",\"this\",\"which\",\"at\"]\n    };\n\n    const el = id => document.getElementById(id);\n\n    function updateStats(text){\n      const words = text.trim().split(\/\\s+\/).filter(Boolean);\n      const chars = text.replace(\/\\s\/g,'').length;\n      const sentences = text.match(\/[^.!?]+[.!?]*\/g) || [];\n      el('wordCount').innerText = words.length;\n      el('charCount').innerText = chars;\n      el('sentCount').innerText = sentences.length;\n      el('readTime').innerText = Math.max(1, Math.round(words.length \/ 200));\n    }\n\n    function tokenizeWords(text){\n      return text.toLowerCase().replace(\/[^\\p{L}\\p{N}\\s]\/gu,' ').split(\/\\s+\/).filter(Boolean);\n    }\n\n    function langDetect(text){\n      return \/[\\u0600-\\u06FF]\/.test(text) ? 'ar' : 'en';\n    }\n\n    function scoreSentences(text, langPref){\n      const sentences = text.match(\/[^.!?]+[.!?]*\/g) || [text];\n      const language = langPref==='auto' ? langDetect(text) : langPref;\n      const stop = new Set(STOPWORDS[language] || []);\n      const words = tokenizeWords(text).filter(w => !stop.has(w) && w.length>1);\n\n      const freq = {};\n      for(const w of words){ freq[w] = (freq[w]||0)+1; }\n      const maxf = Math.max(0, ...Object.values(freq));\n      for(const k in freq) freq[k] = freq[k]\/(maxf||1);\n\n      const sents = sentences.map(s => {\n        const toks = tokenizeWords(s).filter(w=>!stop.has(w) && w.length>1);\n        let score = 0;\n        for(const t of toks) if(freq[t]) score += freq[t];\n        return {text: s.trim(), score: score, length: toks.length};\n      });\n\n      return sents;\n    }\n\n    function summarizeExtractive(text, sentencesCount, mode, langPref){\n      if(!text.trim()) return '';\n      const sents = scoreSentences(text, langPref);\n      if(sentencesCount == 0){\n        const top = [...sents].sort((a,b)=>b.score - a.score).slice(0,8);\n        const bullets = top.map(s => '\u2022 ' + s.text);\n        return bullets.join('\\n');\n      }\n      const ranked = [...sents].sort((a,b)=>b.score - a.score).slice(0, Math.max(1, sentencesCount));\n      const orderIdx = new Set(ranked.map(r => r.text));\n      const finalOrdered = sents.filter(s => orderIdx.has(s.text));\n      if(mode === 'bullet'){\n        return finalOrdered.map(s => '\u2022 ' + s.text).join('\\n');\n      }else{\n        return finalOrdered.map(s => s.text).join(' ');\n      }\n    }\n\n    \/\/ DOM\n    const input = el('inputText');\n    const summaryBox = el('summary');\n    const btn = el('summarizeBtn');\n    const clearBtn = el('clearBtn');\n    const copyBtn = el('copyBtn');\n    const downloadBtn = el('downloadBtn');\n    const shareBtn = el('shareBtn');\n    const examplesBtn = el('examplesBtn');\n\n    input.addEventListener('input', () => updateStats(input.value));\n\n    btn.addEventListener('click', () => {\n      const text = input.value.trim();\n      if(!text){\n        summaryBox.innerText = 'Please enter some text first.';\n        return;\n      }\n      const sentencesCount = parseInt(el('sentencesCount').value, 10);\n      const mode = el('mode').value;\n      const lang = el('lang').value;\n      if(text.split(\/\\s+\/).length < 30){\n        const s = summarizeExtractive(text, sentencesCount, mode, lang);\n        summaryBox.innerText = s;\n        return;\n      }\n      const s = summarizeExtractive(text, sentencesCount, mode, lang);\n      summaryBox.innerText = s || 'Not enough content to summarize \u2014 try changing length.';\n    });\n\n    clearBtn.addEventListener('click', ()=> {\n      input.value = '';\n      summaryBox.innerText = 'Place your text and click \"Summarize\".';\n      updateStats('');\n    });\n\n    copyBtn.addEventListener('click', async ()=>{\n      try{\n        await navigator.clipboard.writeText(summaryBox.innerText);\n        copyBtn.innerText = 'Copied \u2713';\n        setTimeout(()=> copyBtn.innerText = 'Copy summary', 1500);\n      }catch(e){\n        alert('Copy failed \u2014 please copy manually.');\n      }\n    });\n\n    downloadBtn.addEventListener('click', ()=>{\n      const blob = new Blob([summaryBox.innerText], {type:'text\/plain;charset=utf-8'});\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement('a');\n      a.href = url;\n      a.download = 'summary.txt';\n      document.body.appendChild(a); a.click(); a.remove();\n      URL.revokeObjectURL(url);\n    });\n\n    shareBtn.addEventListener('click', ()=>{\n      const s = encodeURIComponent(summaryBox.innerText.slice(0,2000));\n      const shareUrl = location.origin + location.pathname + '?summary=' + s;\n      navigator.clipboard.writeText(shareUrl).then(()=> {\n        shareBtn.innerText = 'Link copied \u2713'; setTimeout(()=> shareBtn.innerText = 'Share (link)',1500);\n      });\n    });\n\n    examplesBtn.addEventListener('click', ()=>{\n      const ex = `Sample long text about personal organization in the digital age:\n\nIn the age of speed and technology, personal organization has become essential for success. Organization boosts productivity, improves focus, and reduces stress. Simple techniques like time-blocking, task lists, and priority-setting help a lot. Digital tools assist in tracking tasks and deadlines. Adopting the right organization approach leads to a better quality of life and steady achievement of professional and personal goals.`;\n      input.value = ex;\n      updateStats(ex);\n    });\n\n    window.addEventListener('load', ()=> {\n      const params = new URLSearchParams(location.search);\n      if(params.has('summary')){\n        try{ summaryBox.innerText = decodeURIComponent(params.get('summary')); }catch(e){}\n      }\n    });\n\n  <\/script>\n<\/body>\n<\/html>\n\n\n\n<p><\/p>\n\n\n\n<section class=\"card\" style=\"margin-top:20px;\">\n  <h2>About This Text Summarizer<\/h2>\n  <p>\n    This <strong>Online Text Summarizer<\/strong> helps you quickly extract the main points from any long text. \n    Perfect for <strong>students, researchers, and content writers<\/strong>, it allows you to save time \n    by turning lengthy articles, essays, or reports into concise summaries.\n  <\/p>\n\n  <h3>Key Features:<\/h3>\n  <ul>\n    <li>Summarize text in <strong>paragraphs or bullet points<\/strong>.<\/li>\n    <li>Choose the number of sentences for your summary.<\/li>\n    <li>Supports <strong>English and Arabic<\/strong> texts.<\/li>\n    <li>Copy or download the summary instantly.<\/li>\n    <li>Fast and runs entirely in your browser, no sign-up required.<\/li>\n  <\/ul>\n\n  <p>\n    Using this tool is easy: just paste your text above, select your preferences, \n    and click <strong>&#8220;Summarize&#8221;<\/strong> to get your results in seconds.\n  <\/p>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Online Text Summarizer \u2014 Quick &#038; Accurate | Poxiro \ud83d\udcdd Text Summarizer Paste a long text or load a .txt file. Choose the summary length, output style (paragraph or bullets), then click &#8220;Summarize&#8221;. Great for students, researchers, and content writers. Summary length (sentences):&nbsp; 2 sentences3 sentences5 sentences8 sentencesExtract key points Output style: ParagraphBullets Language: Auto [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1813","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"trp-custom-language-flag":false},"uagb_author_info":{"display_name":"ar3508802@gmail.com","author_link":"https:\/\/poxiro.com\/ar\/author\/ar3508802gmail-com\/"},"uagb_comment_info":0,"uagb_excerpt":"Online Text Summarizer \u2014 Quick &#038; Accurate | Poxiro \ud83d\udcdd Text Summarizer Paste a long text or load a .txt file. Choose the summary length, output style (paragraph or bullets), then click &#8220;Summarize&#8221;. Great for students, researchers, and content writers. Summary length (sentences):&nbsp; 2 sentences3 sentences5 sentences8 sentencesExtract key points Output style: ParagraphBullets Language: Auto&hellip;","_links":{"self":[{"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/pages\/1813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/comments?post=1813"}],"version-history":[{"count":6,"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/pages\/1813\/revisions"}],"predecessor-version":[{"id":1930,"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/pages\/1813\/revisions\/1930"}],"wp:attachment":[{"href":"https:\/\/poxiro.com\/ar\/wp-json\/wp\/v2\/media?parent=1813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}