UNPKG

@harryjwang/simplewordcloud

Version:

A simple word cloud generator supporting English and Chinese text

1 lines 5.45 kB
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("d3-cloud"),require("d3")):"function"==typeof define&&define.amd?define(["react","d3-cloud","d3"],t):"object"==typeof exports?exports.SimpleWordCloudReact=t(require("react"),require("d3-cloud"),require("d3")):e.SimpleWordCloudReact=t(e.react,e["d3-cloud"],e.d3)}(this,((e,t,o)=>(()=>{"use strict";var r={155:t=>{t.exports=e},200:function(e,t,o){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WordCloud=void 0;const i=r(o(895));t.WordCloud=i.default,t.default=i.default},348:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SimplifiedChineseTokenizer=t.SimplifiedEnglishTokenizer=void 0,t.getSimplifiedTokenizer=function(e){switch(e){case"english":return new o;case"chinese":return new r;default:throw new Error(`Unsupported language: ${e}`)}};class o{constructor(){this.stopwords=new Set(["a","an","the","and","or","but","if","because","as","what","which","this","that","these","those","then","just","so","than","such","both","through","about","for","is","of","while","during","to","from","in","on","at","by","with","without","not","no","be","am","are","was","were","being","been","have","has","had","having","do","does","did","doing","would","should","could","can","will","shall","may","might","must","i","you","he","she","it","we","they","me","him","her","us","them","my","your","his","its","our","their","mine","yours","hers","ours","theirs"])}tokenize(e){const t=e.toLowerCase().split(/[^\w']+/).filter(Boolean),o=new Map;for(const e of t)this.stopwords.has(e)||e.length<=1||/^\d+$/.test(e)||(o.has(e)?o.set(e,o.get(e)+1):o.set(e,1));return o}}t.SimplifiedEnglishTokenizer=o;class r{constructor(){this.stopwords=new Set(["的","了","和","是","就","都","而","及","與","著","或","一個","沒有","我們","你們","他們","她們","自己","之","與","在","也","因","此","但","並","個","其","已","無","小","大","中","上","下","不","為","以","於","對","她","他","你","我","們","的","可以","這","那","到","由","這個","那個","從","最","所","它"])}tokenize(e){const t=[];for(let o=0;o<e.length;o++){const r=e[o];/[\u4e00-\u9fa5]/.test(r)&&(t.push(r),o<e.length-1&&/[\u4e00-\u9fa5]/.test(e[o+1])&&t.push(r+e[o+1]))}const o=new Map;for(const e of t)this.stopwords.has(e)||(o.has(e)?o.set(e,o.get(e)+1):o.set(e,1));return o}}t.SimplifiedChineseTokenizer=r},449:e=>{e.exports=t},893:e=>{e.exports=o},895:function(e,t,o){var r,i=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o);var i=Object.getOwnPropertyDescriptor(t,o);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,r,i)}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[t.length]=o);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o=r(e),s=0;s<o.length;s++)"default"!==o[s]&&i(t,e,o[s]);return n(t,e),t}),a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.WordCloud=void 0;const u=s(o(155)),l=s(o(893)),d=a(o(449)),h=o(348),c={width:800,height:600,fontFamily:"Arial, sans-serif",maxWords:100,colors:[...l.schemeCategory10],padding:5,minFontSize:10,maxFontSize:60,rotationAngles:[0,90],rotationProbability:.3};t.WordCloud=e=>{const{text:t,language:o,width:r=c.width,height:i=c.height,fontFamily:n=c.fontFamily,maxWords:s=c.maxWords,colors:a=c.colors,padding:f=c.padding,minFontSize:p=c.minFontSize,maxFontSize:m=c.maxFontSize,rotationAngles:g=c.rotationAngles,rotationProbability:w=c.rotationProbability,className:b,style:y}=e,v=(0,u.useRef)(null);return(0,u.useEffect)((()=>{if(!v.current||!t)return;const e=v.current;for(;e.firstChild;)e.removeChild(e.firstChild);const u=(0,h.getSimplifiedTokenizer)(o).tokenize(t),c=Array.from(u.entries()).sort(((e,t)=>t[1]-e[1])).slice(0,s).map((([e,t])=>{const o=Array.from(u.values()),r=Math.min(...o),i=Math.max(...o);return{text:e,size:r===i?m:p+(t-r)/(i-r)*(m-p),rotate:Math.random()>w?0:g[Math.floor(Math.random()*g.length)]}})),b=(0,d.default)().size([r,i]).words(c).padding(f).rotate((e=>e.rotate)).font(n).fontSize((e=>e.size)).on("end",(t=>{const o=l.scaleOrdinal(a),s=document.createElementNS("http://www.w3.org/2000/svg","g");s.setAttribute("transform",`translate(${r/2},${i/2})`),t.forEach(((e,t)=>{const r=document.createElementNS("http://www.w3.org/2000/svg","text");r.setAttribute("text-anchor","middle"),r.setAttribute("transform",`translate(${e.x},${e.y}) rotate(${e.rotate})`),r.setAttribute("font-size",`${e.size}px`),r.setAttribute("font-family",n),r.setAttribute("fill",o(t.toString())),r.textContent=e.text||"",s.appendChild(r)})),e.appendChild(s)}));b.start()}),[t,o,r,i,n,s,a,f,p,m,g,w]),u.default.createElement("svg",{ref:v,width:r,height:i,className:b,style:y})},t.default=t.WordCloud}},i={};return function e(t){var o=i[t];if(void 0!==o)return o.exports;var n=i[t]={exports:{}};return r[t].call(n.exports,n,n.exports,e),n.exports}(200)})()));